Maison >développement back-end >Tutoriel Python >Explication détaillée du destructeur en Python

Explication détaillée du destructeur en Python

藏色散人
藏色散人original
2019-04-01 14:28:169287parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn