[如果我使用__getattr__
并调用a.b.c
,其中a
是我的类的实例,那么我会在"b"
内部获得__getattr__
,这意味着我也需要递归以覆盖对c
的访问。但是如果递归,我将不知道哪个调用是最后一次调用,所以我也不知道何时返回最终值,即无法区分a.b
和(a.b).c
如何克服?
如何在重写操作中获得整个链“ b”,“ c”?
获取b属性可以即时创建某事物的实例:
class A:
def __getattr__(self, name):
if name == "b":
return B()
raise AttributeError(name)
class B:
def __getattr__(self, name):
if name == "c":
return "hi"
raise AttributeError(name)
a = A()
print(a.b.c)
# -> "hi"