__getstate__ et __setstate__

Résolu
riripas Messages postés 18 Statut Membre -  
soyouz123 Messages postés 1 Statut Membre -
Source : https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/233046-appliquez-des-methodes-speciales : 5e partie : Des méthodes spéciales utiles à pickle.

Bonsoir à tous. :) Voici mon problème : dans l'exemple de ce cours, nous devons obtenir 0. En copiant et en collant le code du cours, et en l'ayant vérifié (normalement), j'arrive à cette capture d'écran : la variable reste à 0. Je ne comprends pas. C'est pour cela que j'écris, avant que je ne m'énerve contre Python. :)

Merci beaucoup pour votre aide.

PS : dans la suite du cours, on propose une autre solution avec __setstate__ mais celle-ci ne marche pas non plus. Mais j'attends de voir la solution avec __getstate__.

Bonne fin de soirée à tous. ;)

2 réponses

  1. roudoudou
     
    Salut,

    Dans ton dernier bloc, ce n'est pas
    Temp().attribut_temporaire
    que tu dois afficher, mais
    score.attribut_temporaire
    , puisque c'est dans ta variable score que tu affectes la désérialisation ;)
    1
    1. riripas Messages postés 18 Statut Membre 2
       
      Merci beaucoup, cela marche ! J'essaie immédiatement avec __setstate__. :)
      0
    2. riripas Messages postés 18 Statut Membre 2
       
      Voilà, cela marche avec __setstate__. Merci pour toutes les secondes que j'ai économisées grâce à toi. ;) Bonne soirée.
      0
    3. soyouz123 Messages postés 1 Statut Membre
       
      Merci beaucoup, cela m'a énormément aidé
      0
  2. riripas Messages postés 18 Statut Membre 2
     
    Bon, ma capture d'écran n'est pas passée.

    Ca ne marche pas visiblement. Allez, je copie/colle.


    Python 3.5.2rc1 (v3.5.2rc1:68feec6488b2+, Jun 12 2016, 08:56:24) [MSC v.1900 64 bit (AMD64)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> import pickle
    >>> class Temp:
    """Classe contenant plusieurs attributs, dont un temporaire"""

    def __init__(self):
    """Constructeur de notre objet"""
    self.attribut_1 = "une valeur"
    self.attribut_2 = "une autre valeur"
    self.attribut_temporaire = 5

    def __getstate__(self):
    """Renvoie le dictionnaire d'attributs à sérialiser"""
    dict_attr = dict(self.__dict__)
    dict_attr["attribut_temporaire"] = 0
    return dict_attr

    >>> with open("attributs", "wb") as fichier:
    pickler = pickle.Pickler(fichier)
    pickler.dump(Temp())
    print(Temp().attribut_temporaire)

    5
    >>> with open("attributs", "rb") as fichier:
    depickler = pickle.Unpickler(fichier)
    score = depickler.load()
    print(score)

    <__main__.Temp object at 0x0000018D2CFEDA90>
    >>> with open("attributs", "rb") as fichier:
    depickler = pickle.Unpickler(fichier)
    score = depickler.load()
    print(Temp().attribut_temporaire)

    5
    >>>



    Re-bonne soirée. ;)
    0