源自集合的类。腌制后,Counter会释放值

问题描述 投票:0回答:1

我想创建一个类似于计数器的类,但是具有一些额外的功能。这是精简版:

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有什么奇怪的地方,我该如何解决?

最佳,鲍里斯

python counter pickle dask
1个回答
0
投票

您正在全班腌制。拨开它的味道就叫新鲜。

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__就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.