#python #python-3.x #typeerror #pickle #deque
#python #python-3.x #ошибка типа #pickle #deque
Вопрос:
Я получаю странную ошибку, когда пытаюсь выделить и открепить объект пользовательского класса
from collections import deque
class Buffer(deque):
def __init__(self, maxlen=cf.BUFFER_SIZE):
super().__init__(maxlen=maxlen)
класс содержит некоторую дополнительную функциональность, но даже такая простая реализация приводит к ошибке
код для воспроизведения ошибки:
pickle.loads(pickle.dumps(Buffer()))
ошибка:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-60-70ac6b3f6f8f> in <module>
----> 1 pickle.loads(pickle.dumps(Buffer(), fix_imports=False))
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
Версия Python: 3.7.5 (по умолчанию, октябрь 25 2019, 15:51:11) [ GCC 7.3.0]
Комментарии:
1. Когда
pickle
попытается воссоздать вашBuffer
объект, ему будут переданы все параметры, которые принимает базовыйdeque
, который является как итерируемым, так и значением maxlen. Вам также необходимо принятьiterable
параметр и передать его вsuper().__init__()
вызове. Подумайте об этом — как вы можете восстановить pickledBuffer
, если для него невозможно указать какое-либо содержимое?