Menu

__getstate__ et __setstate__ [Résolu/Fermé]

Messages postés
17
Date d'inscription
lundi 27 juin 2016
Dernière intervention
25 août 2016
- - Dernière réponse : soyouz123
Messages postés
1
Date d'inscription
jeudi 3 janvier 2019
Dernière intervention
3 janvier 2019
- 3 janv. 2019 à 12:34
Source : https://openclassrooms.com/courses/apprenez-a-programmer-en-python/les-methodes-speciales-1 : 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. ;)
Afficher la suite 

2 réponses

Meilleure réponse
1
Merci
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 ;)

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 58082 internautes nous ont dit merci ce mois-ci

riripas
Messages postés
17
Date d'inscription
lundi 27 juin 2016
Dernière intervention
25 août 2016
2 -
Merci beaucoup, cela marche ! J'essaie immédiatement avec __setstate__. :)
riripas
Messages postés
17
Date d'inscription
lundi 27 juin 2016
Dernière intervention
25 août 2016
2 -
Voilà, cela marche avec __setstate__. Merci pour toutes les secondes que j'ai économisées grâce à toi. ;) Bonne soirée.
soyouz123
Messages postés
1
Date d'inscription
jeudi 3 janvier 2019
Dernière intervention
3 janvier 2019
-
Merci beaucoup, cela m'a énormément aidé
Messages postés
17
Date d'inscription
lundi 27 juin 2016
Dernière intervention
25 août 2016
2
0
Merci
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. ;)