¿Cuál es la diferencia entre __reduce__ y __reduce_ex__?
Pregunta
Entiendo que estos métodos son para decapar y desmenuzar y no tienen relación con la función incorporada de reducción, pero ¿cuál es la diferencia entre los 2 y por qué necesitamos ambos?
Solución
Los documentos dicen que
Si se proporciona, en el momento del decapado
__reduce __ ()
se llamará sin argumentos, y debe devolver un cadena o una tupla.
Por otro lado,
A veces es útil conocer el versión del protocolo al implementar
__reduce__
. Esto puede hacerse por implementar un método llamado__reduce_ex__
en lugar de__reduce__
.__reduce_ex__
, cuando existe, se llama con preferencia sobre__reduce__
(aún puede proporcionar__reduce__
para atrás compatibilidad). El__reduce_ex__
Se llamará al método con un solo argumento entero, el protocolo versión.
Por un lado, Guido dice que esta es un área que podría limpiarse.
Otros consejos
__reduce_ex__
es lo que __reduce__
debería haber sido pero nunca se convirtió. __reduce_ex__
funciona como __reduce__
pero se pasa el protocolo de pickle.