12.6定制序列里的__len__魔法方法
代码如下:class Count:
def __init__(self,*num):
self.list1=
self.dict1={}.fromkeys(range(len(self.list1)),0)
def __len__(self):
super(). __len__(self.list1)
def __getitem__(self,key):
self.dict1+=1
return self.list1
def __setitem__(self,key,value):
self.dict1=0
self.list1.append(value)
def __delitem__(self,key):
self.dict1.pop(key)
self.list1.pop(key)
self.dict1=dict(zip(list(range(len(self.list1))),list(self.dict1.values)))
def reverse(self):
self.list1.reverse()
list2=list(self.dict1.values).reverse()
self.dict1=dict(zip(list(range(len(self.list1))),list2))
def counter(self,key):
return self.dict1
为什么def __len__(self):
super(). __len__(self.list1) 会报错显示AttributeError: 'super' object has no attribute '__len__'?有没有大神知道的
这样就不会报错了:
class Count:
def __init__(self,*num):
self.list1=
self.dict1={}.fromkeys(range(len(self.list1)),0)
def __len__(self):
print('自动调用了 len 方法~')
return self.list1.__len__()
def __getitem__(self,key):
self.dict1+=1
return self.list1
def __setitem__(self,key,value):
self.dict1=0
self.list1.append(value)
def __delitem__(self,key):
self.dict1.pop(key)
self.list1.pop(key)
self.dict1=dict(zip(list(range(len(self.list1))),list(self.dict1.values)))
def reverse(self):
self.list1.reverse()
list2=list(self.dict1.values).reverse()
self.dict1=dict(zip(list(range(len(self.list1))),list2))
def counter(self,key):
return self.dict1
c = Count(1,2,3,4,5)
print(len(c)) Twilight6 发表于 2020-6-18 11:44
这样就不会报错了:
这是为什么啊 本帖最后由 Twilight6 于 2020-6-18 13:29 编辑
今天的我更强了 发表于 2020-6-18 12:12
这是为什么啊
具体我也不知道,刚刚去查了资料也没查到什么说明
只是调用 len 函数时候会自动调用 __len__ 方法,你可以重写随意设置返回值多少 直接用len函数, return len(obj) 没有指定继承的类时会默认继承object类
所以Count继承于object,而object没有__len__方法
所以用super().__len__(self.list1)就会报错
如果是
return self.list1.__len__()
因为self.list1是list类的实例,而list有__len__方法
所以这个代码就是调用了list类的__len__方法
不会报错
页:
[1]