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