问题
for example i use this code:
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()
and when it's runned it throws maximum recursion depth exceeded. Can someone please tell me what am i doing wrong here
回答1:
The reference to self.dict1
inside your __getattr__
method causes __getattr__
to be called again, and so on, hence the infinite recursion. The only safe way to access attributes of self
inside __getattr__
is by using references to self.__dict__
. Try
def __getattr__(self, key):
if key in self.__dict__['dict1']:
return self.__dict__['dict1'][key]
Note also that the absence of an else
clause will mean undefined attributes appear to have the value None
.
来源:https://stackoverflow.com/questions/34828857/python-2-getattr-max-recursion-depth