gpt4 book ai didi

python - 如何挑选一个继承自 collections.deque 的类?

转载 作者:太空宇宙 更新时间:2023-11-03 15:16:37 26 4
gpt4 key购买 nike

这个例子很清楚,我有一个继承到deque的类和模块'collections'的一个方法,有时我使用defaultdict,其他人不使用。

>>> from collections import deque, defaultdict
>>> import pickle
>>> class lista(deque):
... def __init__(self):
... deque.__init__(self)
... self.lib = defaultdict(dict)
...
>>> p = lista()
>>> p.append("a")
>>> p.append("b")
>>> p.lib['t']=0
>>> p.__reduce__()
(<class '__main__.lista'>, (['a', 'b'], None), {'lib': defaultdict(<type 'dict'>, {'t': 0})})
>>> pik = pickle.dumps(p)
>>> unpik = pickle.loads(pik)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1382, in loads
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 858, in load
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1133, in load_reduce
TypeError: __init__() takes exactly 1 argument (3 given)
>>>

最后一个问题,如何序列化这个对象?

最佳答案

双端队列是 initialized with up to 3 args :

class collections.deque([iterable[, maxlen]])

在 unpickling 时,所有三个(包括 self)都被提供,而你的 __init__ 不接受它们。例如更改为

class lista(deque):
def __init__(self, iterable=(), maxlen=None):
deque.__init__(self, iterable, maxlen)
self.lib = defaultdict(dict)

关于python - 如何挑选一个继承自 collections.deque 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20418581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com