Vérifiez le comportement du destroyer en Python
Exemple de code * class_test.py *
class_test.py
class SampleClass:
num = 0
def __init__(self, number=1):
SampleClass.num +=1 #Chaque fois qu'une instance est créée, la variable de classe num est incrémentée de 1.
self.num = number #Stockez le numéro d'argument reçu du générateur lors de la création de l'instance dans la variable d'instance num.
def __del__(self):
SampleClass.num -=1 #Décrémenter 1 variable de classe num à chaque fois que vous supprimez une instance
print("Supprimé cette instance")
Démarrez Python3 dans la même hiérarchie que le répertoire contenant le fichier de script ci-dessus
Terminal
$ ls
class_test.py
$ cat class_test.py
class SampleClass:
num = 0
def __init__(self, number=1):
SampleClass.num +=1 #Chaque fois qu'une instance est créée, la variable de classe num est incrémentée de 1.
self.num = number #Stockez le numéro d'argument reçu du générateur lors de la création de l'instance dans la variable d'instance num.
def __del__(self):
SampleClass.num -=1 #Décrémenter 1 variable de classe num à chaque fois que vous supprimez une instance
print("Supprimé cette instance")
$
$ python3
>>>
* Importez * le module * class_test * pour créer et supprimer une instance de la classe * SampleClass *.
Terminal
>>> import class_test as ct
>>>
>>> sample_1 = ct.SampleClass()
>>> print(ct.SampleClass.num)
1
>>>
>>> print(sample_1.num)
1
>>>
(Pointe ici)
- Créé une instance de la classe * SampleClass *.
- La valeur de la variable de classe * num * qui gère le nombre d'instances s'affiche sous la forme 1.
- De plus, la valeur de la variable d'instance * num * de l'instance générée * sample_1 * est définie sur 1 définie dans l'argument par défaut du constructeur.
Terminal
>>> sample_2 = ct.SampleClass(number=4)
>>> print(ct.SampleClass.num)
2
>>> print(sample_2.num)
4
>>>
(Pointe ici)
- Créé une autre instance de la classe * SampleClass *.
- La valeur de la variable de classe * num * qui gère le nombre d'instances s'affiche sous la forme 2.
- En outre, la valeur de la variable d'instance * num * que l'instance générée * sample_2 * a est définie sur 4 qui a été transmise en tant qu'argument au constructeur lors de la génération de * sample_2 *.
Terminal
>>> sample_3 = ct.SampleClass(number=15)
>>> print(ct.SampleClass.num)
3
>>> print(sample_3.num)
15
>>>
(Pointe ici)
- Créé une autre instance de la classe * SampleClass *. Vous avez maintenant créé un total de 3 instances.
- La valeur de la variable de classe * num * qui gère le nombre d'instances s'affiche sous la forme 3.
- En outre, la valeur de la variable d'instance * num * que l'instance générée * sample_3 * a est définie sur 15 qui a été transmise en tant qu'argument au constructeur lors de la génération de * sample_3 *.
De là, vous pouvez vérifier le comportement du destroyer.
Terminal
>>> del sample_2
Supprimé cette instance
>>>
(Pointe ici)
- Le * print ("Cette instance a été supprimée") décrit dans le * destroyer * de la classe * SampleClass * a été exécuté.
- Vous avez maintenant deux instances.
Terminal
>>> print(ct.SampleClass.num)
2
>>> print(sample_1.num)
1
>>> print(sample_3.num)
15
>>> print(sample_2.num)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sample_2' is not defined
>>>
(Pointe ici)
- La valeur de la variable de classe * num * qui gère le nombre d'instances s'affiche sous la forme 2.
- Lorsque vous supprimez l'instance nommée * sample_2 *, vous pouvez voir que le processus de décrémentation de la variable de classe * num * décrit dans * destructor * a été exécuté correctement.
- À ce moment, il a également été confirmé que les variables d'instance des deux instances (* sample_1 * et * sample_3 *) autres que l'instance supprimée n'avaient pas changé de valeur et n'étaient pas affectées par inadvertance. ..
(Une addition)
Le code sera plus court si l'instruction * import * est la suivante.
déclaration d'importation (après modification)
from class_test import SampleClass
Terminal
>>> from class_test import SampleClass
>>>
>>> sample_1 = SampleClass()
>>> print(SampleClass.num)
1
>>> print(sample_1.num)
1
>>>
>>> sample_2 = SampleClass(number=4)
>>> print(SampleClass.num)
2
>>> print(sample_2.num)
4
>>>
(Page Web de référence)
- Comment utiliser Python destructor [pour les débutants]
- [Python] Trouvez le nombre d'instances
- À propos des classes Python
- Article Qiita de @ ysk24ok "[Python] Import Stumbling Point"