Qual è la differenza tra __reduce__ e __reduce_ex__?
Domanda
Capisco che questi metodi sono per il decapaggio / disimballaggio e non hanno alcuna relazione con la funzione integrata di riduzione, ma qual è la differenza tra i 2 e perché abbiamo bisogno di entrambi?
Soluzione
I documenti dicono che
Se fornito, al momento del decapaggio
__reduce __ ()
verrà chiamato con il n argomenti e deve restituire a stringa o una tupla.
D'altra parte,
A volte è utile conoscere il versione del protocollo durante l'implementazione
__ ridurre __
. Questo può essere fatto da implementando un metodo chiamato__reduce_ex__
anziché__ ridurre __
.__reduce_ex__
, quando esiste, viene chiamato in preferenza__reduce__
(potresti comunque fornire__reduce__
per le versioni precedenti Compatibilità). Il__reduce_ex__
il metodo verrà chiamato con un singolo argomento intero, il protocollo versione.
Sulla mano avvincente, Guido dice che questa è un'area che potrebbe essere ripulita.
Altri suggerimenti
__reduce_ex__
è ciò che __reduce__
avrebbe dovuto essere ma non è mai diventato. __reduce_ex__
funziona come __reduce__
ma il protocollo pickle è passato.