例如我使用此代码:
class A(object):
def __init__(self):
self.dict1 = {
'A': 3,
'B': self.A}
def __getattr__(self, key):
if key in self.dict1:
return self.dict1[key]
a = A()
当它运行时,它会抛出超出的最大递归深度。 有人可以告诉我这里我做错了什么
答案 0 :(得分:5)
self.dict1
方法中对__getattr__
的引用会导致再次调用__getattr__
,依此类推,因此无限递归。在self
内访问__getattr__
属性的唯一安全方法是使用对self.__dict__
的引用。尝试
def __getattr__(self, key):
if key in self.__dict__['dict1']:
return self.__dict__['dict1'][key]
另请注意,缺少else
子句意味着未定义的属性似乎具有值None
。