47讲定制序列关于c1.values不会触发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):
print('访问我了')
self.count += 1
return self.values
#c1=CountList(22,33,44,55)
#c1.values不会触发getitem
c1会触发,但是c1.values不会触发getitem。这是为什么?
难道c1.values不属于访问容器元素吗, __getitem__是该类对象的方法,不是该类对象属性的方法。
c1会触发,因为是该类对象访问了容器元素。
而c1.value是该类对象的属性访问了容器元素。 c1.values这个是列表,由列表管理的,不是c1类管理 sunrise085 发表于 2020-9-28 21:09
__getitem__是该类对象的方法,不是该类对象属性的方法。
c1会触发,因为是该类对象访问了容器元素。
...
我要是想让出c1.values有同样的效果
该类对象属性的方法怎么写{:5_99:} zhangfeiwen 发表于 2020-9-29 08:55
我要是想让出c1.values有同样的效果
该类对象属性的方法怎么写
那是另一个魔法函数,第46讲不是有么?
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):
print('访问我了')
self.count += 1
return self.values
def __getattribute__(self,name):
print('getattribute',name)
return super().__getattribute__(name)
print("第一句")
c1=CountList(22,33,44,55)
print("第二句")
print(c1)
print("第三句")
print(c1.values) sunrise085 发表于 2020-9-29 09:14
那是另一个魔法函数,第46讲不是有么?
{:10_254:}感谢大佬 突然想到就问你了 Stubborn 发表于 2020-9-28 21:26
c1.values这个是列表,由列表管理的,不是c1类管理
感谢答疑{:10_254:}
页:
[1]