目录

继承collections.abc实现自定义容器类型

概述

大量的 Python 代码编写工作其实都是在定义各种各样的类,这些类之间通过数据对象的方式进行交互,从某种程度而言,这些类也可以视为是一种「数据容器」,他们封装了属性和功能,Python 也直接提供了一些管理数据所用的内置容器类型,例如 list, tuple, set, dictionary。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class FrequencyList(list):
    def __init__(self, members):
        super(FrequencyList, self).__init__(members)

    def frequency(self):
        counts = {}
        for item in self:
            counts.setdefault(item, 0)
            counts[item] += 1
        return counts

if __name__ == '__main__':
    foo = FrequencyList(['a', 'b', 'c'])
    print len(foo)
    foo.pop()
    print 'after pop:', repr(foo)
    print 'frequency:', foo.frequency()

上例中,自定义的 FrequencyList 继承于 list,所提供的全部标准功能,使得 Python 程序员都可以用他们所熟悉的写法来使用这个类,另外还可以根据自己需求增加一些像 frequency 的方法。

参考资料

  1. Effective Python
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。