Explication détaillée du destructeur en Python

藏色散人
Libérer: 2019-04-01 14:28:16
original
9219 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

Sortie :

Employee created.
Destructor called, Employee deleted.
Copier après la connexion

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...')
Copier après la connexion

Sortie :

Calling Create_obj() function...
Making Object...
Employee created
function end...
Program End...
Destructor called
Copier après la connexion

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()
Copier après la connexion

Sortie :

die
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!