0
我有一个python pickle文件,当我尝试加载它时,我希望它在另一个之前加载一个特定的对象(因为我有一些依赖项...)。在Python pickle中加载对象的顺序
这可能吗?
下面是这种情况:
class A:
def __init__(self):
self.known_names = ["Dan", "David"]
def __getattr__(self, name):
if name not in self.known_names:
raise UnknownName
else:
return self[name]
class B:
def __init__(self):
self.a_instance = A()
def __setattr__(self, name, value):
if self.a_instance.attr == "something":
do_something...
def __setstate__(self):
self.foo = "blah"
装入泡菜文件时出现问题。 B类实例加载到B类中。在这种情况下,B类的__setstate__
方法尝试设置self.foo
。这个结果是__settattr__
方法调用,它检查self.a_instance
的attr
属性。但是,A类不是未拆开的,所以self.known_names
不存在。因此,将A的__getattr__
称为无限递归(因为known_names
不存在,所以它也调用__getattr__
)。
http://docs.python.org/library/pickle.html#subclassing-unpicklers – Amber 2012-03-20 08:12:00