나는 __getattr__
과 고민 중이다. 복잡한 재귀 코드베이스가 있는데 예외를 전파하는 것이 중요합니다. 에서파이썬 : __getattr__이 AttributeErrors를 잡는 이유는 무엇입니까?
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__
documentation). getattr()
은 A.__dict__
을 사용할 수 있습니다. 이견있는 사람? 우리가 보는 바와 같이
문서의 실패는'AttributeError'가'__get__'에서 제기 될 수 있다고 말하면서 (실제로 여기에서하는 것입니다.) 어떤 효과가 있는지 설명하지 않습니다. 'AttributeError'는 애트리뷰트가 발견되지 않은 것처럼 행동해야한다는 것을 파이썬에 알려 주어야합니다 (평소와 같이'__getattr__'가 백업으로 시도됩니다). - 당신이 원하는 행동이 아니라면 너는 다른 것을 모아야한다. – James