Python pickle сломан?

#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__() вызове. Подумайте об этом — как вы можете восстановить pickled Buffer , если для него невозможно указать какое-либо содержимое?