G-Bule 发表于 2022-11-5 11:55:23

关于_getattribute__()的疑惑_

>>> class C:
        def __init__(self,name,age):
                self.name = name
                self.age = age
        def __getattribute__(self,attrname):#这里的attrname是什么
                print("拿来吧你~")
                return super().__getattribute__(attrname)#为什么当c.name发生的时候,他的返回值是‘小甲鱼’

       
>>> c = C("小甲鱼",30)
>>> c.name
拿来吧你~
'小甲鱼'
>>> c.age
拿来吧你~
30
>>>
>>> C.mro()
[<class '__main__.C'>, <class 'object'>]

jackz007 发表于 2022-11-5 12:16:45

本帖最后由 jackz007 于 2022-11-5 12:19 编辑

         attrname 是属性的名称
a = C('abc' , 21)    # a . name = 'abc' , a . age = 21,name 和 age 就是 __getattribute__() 当中的 attrname
print(a . name)      # 访问对象属性的时候会自动触发 __getattribute__(),attrname =name
print(a . age)       # 访问对象属性的时候会自动触发 __getattribute__(),attrname =age
         因为 c = ('小甲鱼' , 30) 所以, c . name = '小甲鱼',c . age = 30

G-Bule 发表于 2022-11-5 15:10:03

jackz007 发表于 2022-11-5 12:16
attrname 是属性的名称

         因为 c = ('小甲鱼' , 30) 所以, c . name = '小甲鱼',c ....

可以解释一下这个super()吗,为什么他没有继承任何类也可以用super()

jackz007 发表于 2022-11-5 15:22:48

本帖最后由 jackz007 于 2022-11-5 15:27 编辑

G-Bule 发表于 2022-11-5 15:10
可以解释一下这个super()吗,为什么他没有继承任何类也可以用super()

      super() 用于访问对象父类的方法,Python 每个对象都来自于共同的父类: object

可恶的神经网络 发表于 2023-12-29 17:20:57

本帖最后由 可恶的神经网络 于 2024-1-3 08:58 编辑

jackz007 发表于 2022-11-5 15:22
super() 用于访问对象父类的方法,Python 每个对象都来自于共同的父类: object

请问一下,如果getattribute是调用的其父类object的方法,那为什么还会返回‘小甲鱼’这个值,object里没有小甲鱼这个值呀

可恶的神经网络 发表于 2023-12-29 17:22:17

本帖最后由 可恶的神经网络 于 2024-1-3 08:58 编辑

可恶的神经网络 发表于 2023-12-29 17:20
请问一下,如果getattribute是调用的其父类object的方法,那为什么还会返回‘小甲鱼’这个值
页: [1]
查看完整版本: 关于_getattribute__()的疑惑_