我想创建一个类似于计数器的类,但是具有一些额外的功能。这是精简版:
from collections import Counter
import pickle
class DerivedCounter(Counter):
def __init__(self, *args, capacity: int = 10):
super().__init__(*args)
self._capacity = capacity
dc = DerivedCounter(capacity = 200)
print(pickle.loads(pickle.dumps(dc))._capacity)
[使用Dask时,该对象将被腌制和去腌制。不幸的是,_capacity的值在途中丢失了,输出为:
Original 200
Pickled 10
似乎使用默认值,而不是创建对象时选择的默认值!当我从dict而不是Counter继承时,我得到了:
Original 200
Pickled 200
那么,Counter有什么奇怪的地方,我该如何解决?
最佳,鲍里斯
您正在全班腌制。拨开它的味道就叫新鲜。
from collections import Counter
import pickle
class DerivedCounter(Counter):
def __init__(self, *args, capacity=10):
print('dc', args, capacity) #<---add this line
Counter.__init__(self, *args)
self._capacity = capacity
dc = DerivedCounter(capacity=200)
print(pickle.loads(pickle.dumps(dc))._capacity)
#>>> dc () 200
#>>> dc ({},) 10
#>>> 10
也许腌制dc.__dict__
就足够了。