python的__getattribute__()方法
直接上代码:
输出:
xxx
defaultValue
以上在B类中定义了def __getattribute__(self,obj) 函数后,当我访问a.x的时候,正确输出'xxx'
但是访问b.y的时候,根据《python核心编程》上的说法:
优先级__getattribute__ > 实例的__dict__ > 父类的__dict__ > __getattr__
那么应该输出 200 ,而不是 defaultValue
还有就是当调用b.say()的时候,也出错,是不是__getattribute__的设置太过霸道了,“劫持”了实例b
所有的属性和方法啊!
感到非常困惑,GOOGLE了很多,还是有疑问,请高手赐教,多谢了!
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了很多,还是有疑问,请高手赐教,多谢了!
...全文
相关推荐
Python中几种属性访问的区别与用法详解
主要给大家介绍了关于Python中几种属性访问的区别和用法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Python中反射和描述器总结
主要介绍了Python中的反射和描述器一些知识的汇总,非常的详细,有需要的小伙伴可以参考下
python直接访问私有属性的简单方法
下面小编就为大家带来一篇python直接访问私有属性的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
圣诞树python-31-获取和修改私有属性值.ev4.rar
圣诞树python-31-获取和修改私有属性值.ev4.rar
Python object类中的特殊方法代码讲解
在本篇文章里小编给各位整理了关于Python object类中的特殊方法代码讲解,需要的朋友们可以参考下。 python版本:3.8 class object: """ The most base type """ # del obj.xxx或delattr(obj,'xxx')时被调用,删除对象中的一个属性 def __delattr__(self, *args, **kwargs): # real signature unknown """ Implement delattr(self, name). """ pass # 对应dir(obj),返回一个列表,其中包含所有属性和


