我有一個簡單的樹結構,其中每個節點可以具有它們通過鍵訪問幾個孩子(+存儲在value
一些有效載荷):的Python:模糊度時(未)酸洗基於字典樹
class NodeDict(dict):
def __init__(self, parent):
self.parent = parent
self.value = None
def AddChild(self, label):
self[label] = NodeDict(self)
return self[label]
class TreeDict:
def __init__(self):
self.root = NodeDict(None)
def ToString(self, level, node):
res = ":" + str(node.value) + "\n"
for k, v in node.items():
res += " "*level + str(k) + self.ToString(level + 1, v)
return res
def __str__(self):
return self.ToString(1, self.root)
當我嘗試醃製這樣的樹我有沒有正確拆封如下面的示例中的問題表明:
class Obj:
def __init__(self, v):
self.v = v
def __str__(self):
return str(self.v)
t = TreeDict()
a = t.root.AddChild(Obj("A"))
b = a.AddChild(Obj("B"))
c = b.AddChild(Obj("C"))
d = b.AddChild(Obj("D"))
e = a.AddChild(Obj("E"))
print t
import cPickle
cPickle.dump(t, open("test.dat", "w"))
t = cPickle.load(open("test.dat", "r"))
print t
的樹是這個樣子
前和這樣的封裝狀態後:
:None
A:None
B:None
B:None
D:None
C:None
E:None
E:None
問題的事實,我在樹中使用Obj
爲label
秒(即出現作爲dict
中的鍵)。 (如果使用例如字符串而不是Obj
,則它也失敗,如果它們不是全部相互不同的話)。
這怎麼可能改變成按預期工作?
如果你使用pickle包而不是cpickle,你會得到同樣的行爲嗎? –
你可以通過使TreeDict和Obj從對象繼承來讓你的課程成爲新的風格嗎?行爲是否改變? –
'pickle'在保存時已經失敗(可能正確...) – fuenfundachtzig