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