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 pickle
Attributs :
Paramètre Type Description Valeur par défaut object
object L'objet Python à sérialiser (peut être une instance de classe, liste, dictionnaire, etc.). None
file
file-like object Le fichier ou le flux dans lequel l'objet sera sérialisé (généralement ouvert en mode binaire 'wb'
).None
protocol
int, optionnel (Optionnel) Le protocole de sérialisation. Par défaut, c'est le plus compatible. None
Exemple 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
Person
avec un constructeur qui prend deux attributs :name
etage
. - Nous créons une instance de la classe
Person
avec les valeurs "Alice" et 30. - Nous utilisons
pickle.dump()
pour sérialiser l'objetperson
et l'écrire dans un fichier appeléperson.pkl
en 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 pickle
Attributs :
Paramètre Type Description Valeur par défaut file
file-like object Le fichier ou flux contenant l'objet sérialisé. None
Exemple 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 30
Explication du code :
- Nous ouvrons le fichier
person.pkl
en 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
name
etage
de 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 pickle
Exemple 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 classePerson
pour personnaliser la sérialisation. - Dans
__getstate__
, nous excluons l'attributage
de 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
age
est manipulé selon cette logique.
- Nous ajoutons les méthodes