定制序列

序列的定制一般包含有的魔法方法

  • len(self) 定义当被len()调用时的行为(返回容器中的元素个数)
  • getitem(self,key) 定义获取容器中制定元素的行为,相当于self[key]
  • setitem(self,key,value) 定义获取容器中制定元素的行为,相当于self[key] = value
  • delitem(self,key) 定义删除容器中指定元素的行为,相当于del self[key]
  • iter(self) 定义迭代器中的元素行为
  • reversed(self) 定义当reversed()调用时的行为
  • contains(self,item) 定义当使用成员,测试运算符(in 或 not in)的行为

容器类型的协议

  • 如果说你希望定制的容器是不可变的话,你只需要定义len(self)和getitem(self,key)
  • 如果说你希望定制的容器是可变的话,除了len(self)和getitem(self,key)方法外,你还需要定义setitem(self,key,value)和delitem(self,key)

定义一个不可变的容器,记录里面元素被访问的次数

class CapList():
    def __init__(self,*args):
        self.values = [x for x in args]
        self.count = {}.fromkeys(range(len(self.values)),0)
    def __len__(self):
        return len(self.values)
    
    def __getitem__(self,key):
        self.count[key] += 1

        return self.values[key]
c = CapList(1,2,3,4,5)
c[1]
2
c.count
{0: 0, 1: 1, 2: 0, 3: 0, 4: 0}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容