鱼C论坛

 找回密码
 立即注册
查看: 3818|回复: 5

[已解决]关于_getattribute__()的疑惑_

[复制链接]
发表于 2022-11-5 11:55:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> 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'>]
最佳答案
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-5 15:10:03 | 显示全部楼层
jackz007 发表于 2022-11-5 12:16
attrname 是属性的名称

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

可以解释一下这个super()吗,为什么他没有继承任何类也可以用super()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-5 15:22:48 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-5 15:27 编辑
G-Bule 发表于 2022-11-5 15:10
可以解释一下这个super()吗,为什么他没有继承任何类也可以用super()


        super() 用于访问对象父类的方法,Python 每个对象都来自于共同的父类: object
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-29 17:20:57 | 显示全部楼层
本帖最后由 可恶的神经网络 于 2024-1-3 08:58 编辑
jackz007 发表于 2022-11-5 15:22
super() 用于访问对象父类的方法,Python 每个对象都来自于共同的父类: object


请问一下,如果getattribute是调用的其父类object的方法,那为什么还会返回‘小甲鱼’这个值,object里没有小甲鱼这个值呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-29 17:22:17 | 显示全部楼层
本帖最后由 可恶的神经网络 于 2024-1-3 08:58 编辑
可恶的神经网络 发表于 2023-12-29 17:20
请问一下,如果getattribute是调用的其父类object的方法,那为什么还会返回‘小甲鱼’这个值

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 16:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表