我在处理 __getattr__
时遇到了困难。我的代码库是一个复杂的递归结构,让异常传播非常重要。
class A(object):
@property
def a(self):
raise AttributeError('lala')
def __getattr__(self, name):
print('attr: ', name)
return 1
print(A().a)
结果为:
('attr: ', 'a')
1
为什么会出现这种行为?为什么没有抛出异常?这种行为没有被记录在文档中(
__getattr__
文档)。 getattr()
可以直接使用 A.__dict__
。有什么想法吗?
AttributeError
可能会在__get__
中被引发(这实际上是你在这里所做的),但没有解释其影响。文档应该明确说明AttributeError
表示 Python 应该表现得好像未找到该属性一样(因此将尝试使用备用的__getattr__
)- 如果这不是您想要的行为,则应引发其他异常。 - James