Python pickle使用getattr实现了循环递归?
我得到:Python pickle使用getattr实现了循环递归?,python,pickle,getattr,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),))) 有什么提示吗 我可以通过如下更改代码来解决此问题: 7 def
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)
类测试(对象):
定义初始化(self,a):
self.a=a
def _ugetattr _;(self,name):
a=对象。\ uuuu获取属性\ uuuuuuuu(self,'a')
返回一个.。\uuuu getattr\uuuuu(a,名称)
从pickle导入装载、转储
负载(转储((测试({})))
#
我会使用getattr()
而不是\uuuu getattr\uuuu
。这相当于调用getattr(Test(a).a,name)
。这首先转到a.。\uuuuu getattribute\uuuuu
,如果失败,则转到a.\uuuu getattr\uuuu
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>
class Test(object):
def __init__(self, a):
self._a = a
def __getattr__(self, name):
a = object.__getattribute__(self, '_a')
return getattr(a, name)