容器类型
小甲鱼说定义一个不可变类型,只需要定义__len__(self),和__getitem__()方法.class CountList:
def __init__(self, *args):
self.values =
self.count = {}.fromkeys(range(len(self.values)), 0)
def __len__(self):
return len(self.values)
def __getitem__(self, key):
self.count += 1
return self.values
以上定义了__len__方法和__getitem__方法但是还是可以修改(我的理解是可以修改的)
例:
c = Countlist(1,2,3,4)
c.value.append(5)
这样子还是修改了啊{:10_257:}
这里确实不是那么严谨哈,甲鱼哥所说不可变列表的意思是列表内已有元素的值不可变
比如对容器的第一个元素重新赋值:c = 100 就会发现有报错
不是指的像元组一样不能添加元素,不能删除元素,所以你理解没错哈~
Ps:你举例子时候代码也要认真检查下哈,CountList 你的 L 是小写的、c.values 你少了 s 哈
你这个只是只读且可变的序列(再改改__contains__和 __reversed__也要实现的就能继承到typing.Sequence泛型)
不可变类型还需要重写__hash__ 和__eq__(typing.Hashable泛型)
最终效果就是
c = CountList(1,2,3,4)
b = CountList(1,2,3,4)
c==b #True
hash(c)==hash(b) #True
再就是values和count你注册成属性描述符(@property)就默认不会被修改了
页:
[1]