Sérialisation d'objets personnalisés avec pickle
La sérialisation d’objets personnalisés avec pickle permet de convertir des objets Python, y compris des objets personnalisés (par exemple, des classes définies par l’utilisateur), en un format binaire qui peut être sauvegardé dans un fichier. Ensuite, cet objet peut être facilement désérialisé (chargé) pour être utilisé à nouveau dans une autre session.
Fonctions :
-
pickle.dump()
Cette fonction permet de sérialiser un objet Python et de l'écrire dans un fichier. Cela peut être utile pour sauvegarder des objets complexes, tels que des instances de classe, pour les recharger plus tard.
Importation :
import pickleAttributs :
Paramètre Type Description Valeur par défaut objectobject L'objet Python à sérialiser (peut être une instance de classe, liste, dictionnaire, etc.). Nonefilefile-like object Le fichier ou le flux dans lequel l'objet sera sérialisé (généralement ouvert en mode binaire 'wb').Noneprotocolint, optionnel (Optionnel) Le protocole de sérialisation. Par défaut, c'est le plus compatible. NoneExemple de code :
import pickle # Création d'une classe personnalisée class Person: def __init__(self, name, age): self.name = name self.age = age # Instanciation d'un objet person = Person("Alice", 30) # Sérialisation de l'objet dans un fichier with open('person.pkl', 'wb') as file: pickle.dump(person, file)Explication du code :
- Nous définissons une classe
Personavec un constructeur qui prend deux attributs :nameetage. - Nous créons une instance de la classe
Personavec les valeurs "Alice" et 30. - Nous utilisons
pickle.dump()pour sérialiser l'objetpersonet l'écrire dans un fichier appeléperson.pklen mode binaire ('wb').
- Nous définissons une classe
-
pickle.load()
Cette fonction permet de désérialiser un objet à partir d'un fichier contenant un objet sérialisé par pickle.dump().
Importation :
import pickleAttributs :
Paramètre Type Description Valeur par défaut filefile-like object Le fichier ou flux contenant l'objet sérialisé. NoneExemple de code :
import pickle # Désérialisation de l'objet à partir du fichier with open('person.pkl', 'rb') as file: loaded_person = pickle.load(file) print(loaded_person.name) # Affiche "Alice" print(loaded_person.age) # Affiche 30Explication du code :
- Nous ouvrons le fichier
person.pklen mode binaire lecture ('rb'). - Nous utilisons
pickle.load()pour charger l'objet sérialisé dans le fichier et le restaurer sous forme d'une instance de la classePerson. - Nous affichons les attributs
nameetagede l'objet restauré.
- Nous ouvrons le fichier
-
Sérialisation d'objets personnalisés avec des classes
Lors de la sérialisation d'objets personnalisés, comme des instances de classes, il est souvent nécessaire de personnaliser le comportement de sérialisation pour gérer correctement les objets. Cela peut être accompli en utilisant les méthodes __getstate__ et __setstate__ dans la classe.
Importation :
import pickleExemple de code :
import pickle class Person: def __init__(self, name, age): self.name = name self.age = age # Méthode pour définir l'état à sérialiser def __getstate__(self): state = self.__dict__.copy() state['age'] = None # Exclusion de l'attribut 'age' de la sérialisation return state # Méthode pour restaurer l'état def __setstate__(self, state): self.__dict__.update(state) self.age = 30 # Définir une valeur par défaut pour 'age' à la restauration # Sérialisation de l'objet person = Person("Bob", 25) with open('person_custom.pkl', 'wb') as file: pickle.dump(person, file) # Désérialisation de l'objet with open('person_custom.pkl', 'rb') as file: loaded_person = pickle.load(file) print(loaded_person.name) # Affiche "Bob" print(loaded_person.age) # Affiche 30 (valeur restaurée)Explication du code :
- Nous ajoutons les méthodes
__getstate__et__setstate__à la classePersonpour personnaliser la sérialisation. - Dans
__getstate__, nous excluons l'attributagede la sérialisation en lui attribuant la valeurNone. - Dans
__setstate__, nous restaurons l'état de l'objet en réinitialisant l'attributageà une valeur par défaut. - Lors de la sérialisation et de la désérialisation, l'attribut
ageest manipulé selon cette logique.
- Nous ajoutons les méthodes