Ch6 Objets Serialisation

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 3

R308 : Consolidation de la programmation

Chapitre 6 : fichier et sérialisation d’objets


1 Quelques liens :
https://python.sdv.univ-paris-diderot.fr/07_fichiers/
https://python.developpez.com/tutoriels/apprendre-programmation-python/notions-avancees/?
page=manipulation-de-fichier
Vidéo format json :
https://www.youtube.com/watch?v=xwBsaaTGwX4
2 Sérialisation / Dé-sérialisation d’objets :
2.1 Introduction :
La sérialisation d'un objet permet d'envoyer dans un flux les informations sur la classe et l'état d'un objet
pour permettre de le récréer ultérieurement. Ces informations permettent de restaurer l'état de l'objet même dans
une classe différente qui dans ce cas doit être compatible. Elle permet donc de transformer l'état d'un objet pour
permettre sa persistance en dehors de l’application concernée de l'échanger en utilisant le réseau.
2.2 Utilisation du format de données JSON :
On utilisera le format de données JSON (JavaScript Object Notation) car il est très utilisé en web et
facilement lisible (fichier texte).
Le format json est basé sur la notion de dictionnaire (couple clé, valeur)

2.3 Rappels et différences en les dictionnaires python et JSON :


1. En python :
Le type de clé très large : simplement immuable
les valeurs sont de tout type
2. En JSON
Clé et valeur sont exclusivement des chaînes de caractères
Il n’y a pas de notion de tuple en json => uniquement des listes

2.4 Transformation d’un dictionnaire python en json :


https://www.bogotobogo.com/python/python-json-dumps-loads-file-read-write.php

ch6_objets_serialisation.odt 1/3
2.5 Transformation de dictionnaires python en dictionnaires json et inversement
Utilisation de la méthode dumps() du module json
import json

MON_DICT_JSON = json.dumps(MON_DICT_PYTHON)
Transformation d’un dictionnaire json et python
Les tuples sont transformés en listes
Utilisation de la méthode loads() du module json :
import json

MON_DICT_PYTHON = json.loads(MON_DICT_JSON)

2.6 Lecture et sauvegarde des données au format json dans et depuis un fichier :
1. Sauvegarde dans un fichier au format json
Méthode dump() du module json permet de sauvegarder des données au format json.
NE PAS CONFONDRE AVEC dumps()
import json
json.dump(MON_DICT_PYTHON, fichier)
json.dump(MA_LISTE_DE_DICT_PYTHON, fichier)
2. Lecture d’un fichier json :
La méthode load() du module json permet de lire des données d’un fichier au format json.
NE PAS CONFONDRE AVEC loads()
MON_DICT_PYTHON = json.load(fichier)
MA_LISTE_DE_DICT_PYTHON = json.load(fichier)

3 Découverte à partir d’un exemple : classe personne


Soit la classe Personne ci dessous :
class Personne:
def __init__(self, nom: str, age:int):
self.__nom:str = nom
self.__age:int = age
def __str__(self) -> str:
return f"{self.__nom} {self.__age}"

3.1 Affichage du dictionnaire d’un objet :


En python, un dictionnaire est créé automatiquement pour chaque objet
Attribut __dict__ permet de récupérer le dictionnaire
clé : nom de l’attribut
valeur : valeur de l’attribut
if __name__=="__main__":
# declaration
p1:Personne
# instanciation
p1 = Personne("phil", 58)
# affichage du dictionnaire correspondant (attribut)
print(f"dictionnaire python : {p1.__dict__}")

dictionnaire python : {'_Personne__nom':'phil', '_Personne__age':58}


Remarque : les clés correspondent aux noms des attributs
3.2 Instanciation d’un objet à partir d’un dictionnaire (Rappel) :
Il est également possible d’instancier un objet à partir d’un dictionnaire.
L’opérateur ** permet de « déballer » un dictionnaires
# définition du dictionnaire
dict_personne = { "nom" : "bob", "age" : 63}
# instanciation d’un personne à partir d’un dictionnaire
p3 = Personne(**dict_personne) (1)
(1) ** opérateur d’extraction des dictionnaires
ATTENTION : Dans notre cas, les clés doivent correspondre aux noms des paramètres du constructeur

ch6_objets_serialisation.odt 2/3
3.3 Implémentation d’une méthode qui retournera un dictionnaire spécifique (Rappel) :
Il est toujours possible d’implémenter sa propre méthode qui retourne un dictionnaire en choisissant les
noms des clés.
Cette fois, les noms des clés correspondent aux noms des paramètres du constructeur
def dict_perso(self)-> Dict:
dict: Dict = {}
dict["nom"] = self.__nom
dict["age"] = self.__age
return dict

3.4 Programme test à compléter :


if __name__=="__main__":
# declaration
choix: int = None
liste_personnes: list[Personne]
liste_dict_personnes : liist[Dict]
# instanciation
liste_personnes = list()
liste_personnes.append(Personne("phil", 58))
liste_personnes.append(Personne(age=34, nom="thomas"))
liste_personnes.append(Personne(**{"nom":"bob", "age":63})) #** => opérateur
d'extraction des dictionnaires
# menu
print("1 ; affichage des données avec la méthode __str__()")
print("2 : affichage du dictionnaire automatique")
print("3 : affichage du dictionnaire avec la methode dict_perso()")
print("4 : création et affichage du dictionnaire json de chaque objet")
print("5 : sauvegarde de la liste des dictionnaires au format json (json.dump)")
print("6 : lecture des données dans une liste de dictionnaires (json.load)")
print("7 : sauvegarde des dictionnaires au format json (1 par ligne) (json.dumps)")
print("8 : lecture des données par dictionnaire (1 par ligne) (json.loads)")
choix = int(input("votre choix :"))

ch6_objets_serialisation.odt 3/3

Vous aimerez peut-être aussi