2017-01-12 3 views
0

Je voudrais fournir des valeurs par défaut pour les valeurs manquantes en utilisant le sérialiseur de pickle de Python. Comme les classes sont simples, les valeurs par défaut sont naturellement présentes dans les méthodes __init__ de la classe. Je peux voir de pickle documentation qu'il y a __getnewargs__. Cependant, cela ne fonctionne que dans les cas où __getnewargs__ était présent avant le "décapage".Constructeur d'appel Python Pickle

Est-il possible de dire à python pickle d'appeler toujours le constructeur plutôt que de commencer par un objet non initialisé? Unpickling créera toujours une instance sans appeler __init__()

Répondre

1

C'est par conception. Dans python 2, il était possible de surcharger __getinitargs__() pour provoquer le décodage d'appeler __init__() avec certains arguments, mais il était nécessaire d'avoir cette méthode écrasée au moment du décapage. Ce n'est plus disponible en python 3.

Pour obtenir ce que vous voulez, ne serait-il pas suffisant d'appeler manuellement self.__init__() depuis self.__setstate__(state)? Vous pouvez fournir des arguments par défaut introuvables dans state.