自定义容器类型

简单的类型

对于定制简单的容器类型,自己继承 list 或 dict

class T(list):
  
    def __init__(self, members):
        super().__init__(members)

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

t = T(['a', 'b', 'c', 'a'])
print(t.count())

# {'b': 1, 'c': 1, 'a': 2}

复杂的类型

继承 collections.abc 中的 Sequence 类会使事情简单些。

该类具备容器常用的方法, 只需要实现__len____getitem__ 就行了。

from collections.abc import Sequence

class T(Sequence):
  
    def __init__(self):
        self.a = [1, 2]

    def __len__(self):             # 必须实现 获得容器的长度            
        return len(self.a)

    def __getitem__(self, index):  # 必须实现 根据索引获得 value
        return self.a[index]

t = T()
print(len(t))
print(t[0]

# 2
# 1