class Test(object):
def __init__(self, a):
self.a = a
def __getattr__(self, name):
return getattr(self.a, name)
from pickle import loads, dumps
loads(dumps((Test(something),)))
我得到了:
7 def __getattr__(self, name):
----> 8 return getattr(self.a, name)
RuntimeError: maximum recursion depth exceeded
任何提示?
我可以通过更改代码来解决此问题:
if 'a' in self.__dict__:
return getattr(self.a, name)
但我不想。有更好的解决方案吗?
谢谢
答案 0 :(得分:1)
我使用getattr()
代替__getattr__
。这相当于调用getattr(Test(a).a, name)
。首先转为a.__getattribute__
,如果失败则转为a.__getattr__
class Test(object):
def __init__(self, a):
self._a = a
def __getattr__(self, name):
a = object.__getattribute__(self, '_a')
return getattr(a, name)
答案 1 :(得分:0)
这应该有用,但我怀疑这是个好主意......
class Test(object):
def __init__(self, a):
self.a = a
def __getattr__(self, name):
a = object.__getattribute__(self, 'a')
return a.__getattr__(a, name)
from pickle import loads, dumps
loads(dumps((Test({}))))
# <__main__.Test at 0x7f6beb8>