我想在一个类(python2.7)中自定义属性访问。说我定义了以下类:Python属性访问错误
class testAttrAccess(object):
def __init__(self):
self.data = {"attr1":"value1","attr2":"value2"}
def __getattr__(self,name):
try:
return self.data[name]
except KeyError:
pass
raise AttributeError
然后我得到:
In [85]: a = testAttrAccess()
In [86]: a.attr2
Out[86]: 'value2'
In [87]: a.__getattr__('attr2')
Out[87]: 'value2'
In [88]: a.__getattribute__('attr2')
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/Users/laserson/temp/<ipython console> in <module>()
AttributeError: 'testAttrAccess' object has no attribute 'attr2'
然而,according to the python documentation
如果该类还定义
__getattr__()
,后者将不会被调用,除非__getattribute__()
要么明确地调用它或引发AttributeError
。
所以,如果__getattribute__()
是提高了AttributeError
,那么为什么不__getattr__()
被调用和返回正确的价值?
哦,但为什么'a.attr2'作品。 maybes thats not it ...好问题 – 2011-03-24 19:48:46
'a.attr2'的工作原理恰恰是因为'attr2'不存在,因此'__getattr__'被调用。而默认的'__getattribute__'显然不会调用'__getattr__'。 – delnan 2011-03-24 20:10:03
对,我按照。感谢您的澄清,我第二次猜测我自己一分钟 – 2011-03-25 05:12:36