Конструктор вызовов Python Pickle

Я хотел бы предоставить значения по умолчанию для пропущенных значений, используя сериализатор рассылки Python. Так как классы просты, значения по умолчанию естественно присутствуют в классах __init__ методы.

Я могу видеть из документации маринада, что есть __getnewargs__, Однако это работает только в тех случаях, когда __getnewargs__ присутствовал до "травления".

Есть ли способ сказать Python pickle всегда вызывать конструктор, а не начинать с неинициализированного объекта?

1 ответ

Открепление всегда создает экземпляр без вызова __init__(), Это по замыслу. В питоне 2 можно было переопределить __getinitargs__() вызвать маринование позвонить __init__() с некоторыми аргументами, но необходимо было переопределить этот метод во время травления. Это больше не доступно в Python 3.

Чтобы добиться того, чего вы хотите, не будет ли достаточно просто вручную вызвать self.__init__() от self.__setstate__(state)? Вы можете предоставить любые аргументы по умолчанию, не найденные в state,

Другие вопросы по тегам