4
據我所知,在對象上調用pickle.dumps時,它會調用對象的__getstate__方法(如果有的話)以確定要醃製的東西。__getstate__方法在酸洗集合的子類時不被調用
如果我創建一個類,如:
class DictClass(dict):
def __getstate__(self):
print "pickling"
return self
我得到這樣的結果:
>>> pickle.dumps(DictClass())
pickling
'ccopy_reg\n_reconstructor\np0...'
我可以做同樣的事情,與 '名單' 取代 '字典':
class ListClass(list):
def __getstate__(self):
print "pickling"
return self
>>> pickle.dumps(ListClass())
pickling
'ccopy_reg\n_reconstructor\np0...'
但是如果我使用'set',會發生不同的事情:
class SetClass(set):
def __getstate__(self):
print "pickling"
return self
>>> pickle.dumps(SetClass())
'c__main__\nSetClass...'
__getstate__方法不會被調用。爲什麼會這樣,是否可以指定一個集合的子類的哪一部分來醃製?