chong0918 发表于 2020-8-26 22:35:41

关于python第47课视频定制容器代码中的问题

在小甲鱼第四十七课定制容器视频中,统计访问列表元素次数的代码(代码如下),实例化演示时c1=CountList(1,3,5,7,9),在访问self.values中的元素时,为什么可以直接写c1,不是应该写成self.values吗,另外我自己测试时,self.values可以访问得到结果,但是却没有改变访问次数,请问这是为什么?

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

昨非 发表于 2020-8-26 22:47:01

我的理解是,只有通过实例对象去访问value属性才会触发__getitem__魔法方法,达到记录的目的

chong0918 发表于 2020-8-26 23:02:17

昨非 发表于 2020-8-26 22:47
我的理解是,只有通过实例对象去访问value属性才会触发__getitem__魔法方法,达到记录的目的

为什么实例对象加索引值就可以直接访问,而不报错呢

昨非 发表于 2020-8-26 23:04:54

chong0918 发表于 2020-8-26 23:02
为什么实例对象加索引值就可以直接访问,而不报错呢

我的理解是,类是模板,对象是依照这个模板刻出来的,类内有的函数,属性,对象当然也有(个人理解)

chong0918 发表于 2020-8-26 23:18:23

昨非 发表于 2020-8-26 23:04
我的理解是,类是模板,对象是依照这个模板刻出来的,类内有的函数,属性,对象当然也有(个人理解)

我理解实例化对象加索引值,分别代表self和key,应该都是这么用的

zhangfeiwen 发表于 2020-9-28 19:03:57

页: [1]
查看完整版本: 关于python第47课视频定制容器代码中的问题