Qual é a diferença entre __reduce__ e __reduce_ex__?
Pergunta
Eu entendo que esses métodos são para decapagem / unpickling e não têm relação com a reduzir o built-in função, mas qual é a diferença entre a 2 e por que precisamos de ambos?
Solução
Os docs dizer que
Se fornecido, a decapagem tempo
__reduce__()
será chamado sem argumentos, e deve retornar um string ou uma tupla.
Por outro lado,
Às vezes é útil para saber a versão do protocolo ao implementar
__reduce__
. Isso pode ser feito por a implementação de um método chamado__reduce_ex__
em vez de__reduce__
.__reduce_ex__
, quando se existe, é chamado na preferência sobre__reduce__
(você ainda pode fornecer__reduce__
para trás compatibilidade). o__reduce_ex__
método será chamado com um único argumento inteiro, o protocolo versão.
Na mão segurando, Guido diz que esta é uma área que poderia ser limpo.
Outras dicas
__reduce_ex__
é o que __reduce__
deveria ter sido, mas nunca se tornou. __reduce_ex__
funciona como __reduce__
mas o protocolo de picles é passado.