Ce qui est exactement l'utilisation de __réduisent__ dans Pickler
Je sais que pour être picklable, une classe a à remplacer __reduce__
méthode, et il doit retourner à la chaîne ou tuple.
Comment cela fonctionne?
Ce que l'exacte utilisation de __reduce__
? Quand il été utilisé?
Vous devez vous connecter pour publier un commentaire.
Je vais voir si je peux prendre un coup de couteau à expliquer celui-ci.
Chaque fois que vous essayez de pickle un objet, il y a certaines propriétés qui ne peuvent pas sérialiser bien. Par exemple, un descripteur de fichier ouvert Dans ce cas, les achards de ne pas savoir comment manipuler l'objet et renvoie une erreur.
Vous pouvez dire le module pickle comment gérer ces types d'objets en natif au sein d'une classe directement. Permet de construire l'exemple d'un objet qui possède une seule propriété; un descripteur de fichier ouvert:
Il doit échouer, et de donner un traceback:
Cependant, n'avons-nous défini un
__reduce__
méthode dans notretest
class
, cornichon aurait su comment sérialiser:Cela devrait vous donner quelque chose comme:
"c__main__\ntest\np0\n(S'test1234567890.txt'\np1\ntp2\nRp3\n."
, qui peut être utilisé pour recréer l'objet avec des descripteurs de fichiers ouverts:Généralement, la grande confusion est avec ce type d'objet
__reduce__
devrait revenir. alors que vous pouvez lire un peu plus sur ce type d'objet réduire devrait rentrer dans l'docs pages: http://aakashlabs.org/docs/apl/pyhelp/pydocs/library/pickle.html#pickling-and-unpickling-extension-types, mais en général, il a besoin d'un n-uplet d'au moins 2 choses:self.__class__
Il y a d'autres éléments en option, mais vous devriez lire tout sur eux dans les docs.
Espère que ça aide!
__get_state__
,__set_state__
.__get_state__
/__set_state__
ou__reduce__
?__get_state_
/__set_state__
sont de haut niveau de l'interface,__reduce__
- faible niveau. Donc, je préfère utiliser une interface de haut niveau.