Python pickle 使用 getattr 进行循环递归?

Jia*_* Du 5 python pickle getattr

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),)))
Run Code Online (Sandbox Code Playgroud)

我有:

      7     def __getattr__(self, name):
----> 8         return getattr(self.a, name)

RuntimeError: maximum recursion depth exceeded
Run Code Online (Sandbox Code Playgroud)

任何提示?

我可以通过更改以下代码来解决此问题:

if 'a' in self.__dict__:
    return getattr(self.a, name)
Run Code Online (Sandbox Code Playgroud)

但我不想。有什么更好的解决办法吗?

谢谢

Mat*_*att 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>
Run Code Online (Sandbox Code Playgroud)