为什么这个__getattr__函数不起作用?
我写了一个小类,想试试自定义的 __getattr__
方法,但每次运行它时,都会出现一个属性错误:
class test:
def __init__(self):
self.attrs ={'attr':'hello'}
def __getattr__(self, name):
if name in self.attrs:
return self.attrs[name]
else:
raise AttributeError
t = test()
print test.attr
然后输出是:
Traceback (most recent call last):
File "test.py", line 11, in <module>
print test.attr
AttributeError: class test has no attribute 'attr'
这是怎么回事?我以为在抛出属性错误之前会先调用 getattr 呢?
2 个回答
4
你需要在实例(t
)上查询属性,而不是在类(test
)上查询:
>>> t = test()
>>> print t.attr
hello
8
因为这个类 test
没有 把 attr
当作属性,但实例 t
是有这个属性的:
class test:
def __init__(self):
self.attrs ={'attr':'hello'}
def __getattr__(self, name):
if name in self.attrs:
return self.attrs[name]
else:
raise AttributeError
t = test()
print t.attr