python的__getattribute__()方法

w597766166 w597766166 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
直接上代码:

class B(object):
version = 2.0
def __init__(self,x):
self.x = x
self.y = 200

def __getattribute__(self,obj):
if obj == 'x':
return 'xxx'
else:
raise AttributeError

def __getattr__(self,obj):
return 'defaultValue'

def say(self):
print 'this is B'

b = B(100)
print b.x
print b.y

输出:
xxx
defaultValue

以上在B类中定义了def __getattribute__(self,obj) 函数后,当我访问a.x的时候,正确输出'xxx'
但是访问b.y的时候,根据《python核心编程》上的说法:
优先级__getattribute__ > 实例的__dict__ > 父类的__dict__ > __getattr__
那么应该输出 200 ,而不是 defaultValue

还有就是当调用b.say()的时候,也出错,是不是__getattribute__的设置太过霸道了,“劫持”了实例b
所有的属性和方法啊!
感到非常困惑,GOOGLE了很多,还是有疑问,请高手赐教,多谢了!
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
w597766166
脚本语言 37,738 成员 34,208 内容