Le destructeur est appelé lorsque l'objet est détruit. En Python, les destructeurs ne sont pas aussi nécessaires qu'en C++ car Python dispose d'un garbage collector qui gère automatiquement la gestion de la mémoire. La méthode __del__() est appelée méthode destructeur en Python. Cette fonction est appelée lorsque toutes les références à l'objet ont été supprimées, c'est-à-dire lorsqu'un objet est récupéré.
Syntaxe pour la déclaration du destructeur :
def __del__(self): # body of destructor
Exemple 1 : Vous trouverez ci-dessous un exemple simple de destructeur. Le destructeur est automatiquement appelé en supprimant toutes les références à l'objet "obj" à l'aide du mot-clé del.
# Python program to illustrate destructor class Employee: # Initializing def __init__(self): print('Employee created.') # Deleting (Calling destructor) def __del__(self): print('Destructor called, Employee deleted.') obj = Employee() del obj
Sortie :
Employee created. Destructor called, Employee deleted.
Remarque : Le destructeur est appelé après la fin du programme ou lorsque toutes les références à l'objet ont été supprimées. Lorsque le nombre de références atteint zéro, pas lorsque l'objet sort de la portée.
Exemple 2 : Cet exemple explique les considérations mentionnées ci-dessus. Ici, notez que le destructeur est appelé après l'impression de "Program End...".
# Python program to illustrate destructor class Employee: # Initializing def __init__(self): print('Employee created') # Calling destructor def __del__(self): print("Destructor called") def Create_obj(): print('Making Object...') obj = Employee() print('function end...') return obj print('Calling Create_obj() function...') obj = Create_obj() print('Program End...')
Sortie :
Calling Create_obj() function... Making Object... Employee created function end... Program End... Destructor called
Exemple 3 : Considérons maintenant l'exemple suivant :
# Python program to illustrate destructor class A: def __init__(self, bb): self.b = bb class B: def __init__(self): self.a = A(self) def __del__(self): print("die") def fun(): b = B() fun()
Sortie :
die
Dans cet exemple, lorsque la fonction fun() est appelée, elle crée une instance de classe B, qui se transmet à la classe A, qui définit ensuite une référence à la classe B et crée une référence circulaire.
Normalement, le garbage collector de Python, qui est utilisé pour détecter ces types de références circulaires, les supprimerait, mais dans cet exemple, un destructeur personnalisé est utilisé pour marquer cet élément comme "irrécupérable" ).
En termes simples, il ne connaît pas l'ordre dans lequel les objets sont détruits, donc il les laisse tranquilles. Ainsi, si vos instances impliquent des références circulaires, elles existeront en mémoire tant que l'application sera en cours d'exécution.
Recommandations associées : "Tutoriel Python"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!