Я понимаю, что эти методы предназначены для травления/распиловки и не имеют никакого отношения к сокращенной встроенной функции, но какая разница между 2 и почему нам нужны оба?
В чем разница между __reduce__ и __reduce_ex__?
Ответ 1
Документы говорят, что
Если это предусмотрено, во время травления
__reduce__()
будет вызываться без аргументы, и он должен вернуть либо строка или кортеж.
С другой стороны,
Иногда полезно знать версии протокола при реализации
__reduce__
. Это можно сделать реализация метода с именем__reduce_ex__
вместо__reduce__
.__reduce_ex__
, когда существует, называется предпочтительнее__reduce__
(вы все равно можете предоставить__reduce__
для назад совместимость).__reduce_ex__
метод будет вызываться с одним целочисленный аргумент, протокол версия.
На захватной руке Гвидо говорит, что это область, которую можно очистить.
Ответ 2
__reduce_ex__
- это то, что __reduce__
должно было быть, но не стало. __reduce_ex__
работает как __reduce__
, но протокол pickle передается.