3.14.5.2 Serializzare e deserializzare tipi di estensione

Quando il Pickler incontra un oggetto di un tipo di cui non sa nulla -- come un tipo di estensione -- cerca istruzioni sul modo di serializzarlo in due luoghi. Un'alternativa č che l'oggetto implementi un metodo __reduce__(). Se fornito, durante la serializzazione __reduce__() verrā chiamato senza argomenti, e restituirā o una stringa o una tupla.

Se viene restituita una stringa, nomina una variabile globale il cui contenuto viene serializzato come al solito. Quando viene restituita una tupla, deve essere di lunghezza due o tre, con la seguente semantica:

Sulla deserializzazione, il chiamabile verrā chiamato (a patto che fornisca i criteri di cui sopra), passando nella tupla degli argomenti; dovrebbe restituire l'oggetto deserializzato.

Se il secondo elemento č None, allora invece di chiamare l'oggetto chiamabile direttamente, il suo metodo __basicnew__() viene chiamato senza argomenti. Dovrebbe anche restituire l'oggetto deserializzato.

Deprecato dalla versione 2.3 di Python. Usate, invece, un tupla di argomenti

Un'alternativa per implementare il metodo __reduce__() sull'oggetto da serializzare, consiste nel registrare l'oggetto chiamabile con il modulo copy_reg. Questo modulo fornisce per i programmi un modo di registrare le ``reduction functions'' e i costruttori per i tipi definiti dall'utente. Le funzioni reduction hanno le stesse semantica ed interfaccia del metodo __reduce__() descritto sopra, eccetto per il fatto che vengono chiamate con un singolo argomento, ossia l'oggetto che deve essere serializzato.

Il costruttore registrato viene richiesto come ``safe constructor'' ai fini della deserializzazione descritti precedentemente.

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.