假設我有一個叫做符號的類。在任何時候,我只需要一個帶給定ID的Symbol的副本。例如醃製「實習」對象
registry = {}
class Symbol(object):
def __init__(self, id):
self.id = id
def __eq__(self, other):
return self is other
def symbol(id):
if id not in registry:
registry[id] = Symbol(id)
return registry[id]
我希望能夠鹹菜我的符號對象,但我想不出如何讓cPickle的叫我的符號工廠。現在我只能實現getstate/setstate覆蓋,但是這仍然不能將未被識別的對象與已經存在於註冊表中的對象合併。如何在保留1:1比例的符號與ID的同時醃製上述類?
編輯(更新標題狀態「實習」,而不是「單身」):
讓我解釋一下使用情況。我們使用這些符號作爲字符中的鍵。讓他們大幅拘禁提高性能
我需要什麼有發生:
x = symbol("x")
y = pickle.loads(pickle.dumps(x))
x is y == True
只要不使用單身? – delnan 2012-03-28 14:19:41
那麼,在我的實際案例中,Symbol可以有多個額外的元數據字段,基於「x is y」的比較將比「x.foo == y.foo和x.bar == y」更快。酒吧和...「 – 2012-03-28 14:37:14
pickle不會調用'__init__',但它會調用'__new__'。 – georg 2012-03-28 14:56:37