|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
class Countlist:
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]
k = Countlist(1,3,4,5,6,9,10)
print(k.values[1])
print(k[1])
print(k.count)
访问 k.values[1] 和 k[1],都可以得到同样的返回值
为什么,
1.访问k.values[1]不会触发__getitem__?
2.k[1]这个是怎么来的?为什么是k[1]?
帮助文档这里解释:
- object.__getitem__(self, key)
- Called to implement evaluation of self[key]. For sequence types, the accepted keys should be integers and slice objects.
复制代码
1.我的理解是当对实例化的类进行序列取值时,就会调用这个特殊方法:object.__getitem__(self, key)
然后k.values[1]是指类里面的某一个属性的序列值,并不是指代这个类本身。
2. k[1]回调用__getitem__(self, key) ,这个特殊方法,里面返回的是 self.values[key],也就是values这个属性
所以本质上指向的都是同一个属性值。
个人浅见,不正确的地方希望大家共同交流进步! 
|
|