Überprüfen Sie das Verhalten des Zerstörers in Python

Beispielcode * class_test.py *

class_test.py


class SampleClass:
    num = 0
    def __init__(self, number=1):
        SampleClass.num +=1 #Jedes Mal, wenn eine Instanz erstellt wird, wird die Klassenvariable num um 1 erhöht.
        self.num = number #Speichern Sie die vom Generator beim Erstellen der Instanz empfangene Argumentnummer in der Instanzvariablen num.
    def __del__(self):
        SampleClass.num -=1 #Verringern Sie jedes Mal, wenn Sie eine Instanz löschen, 1 Klassenvariable num
        print("Diese Instanz wurde gelöscht")

Starten Sie Python3 in derselben Hierarchie wie das Verzeichnis, das die obige Skriptdatei enthält

Terminal


$ ls
class_test.py
$ cat class_test.py
class SampleClass:
    num = 0
    def __init__(self, number=1):
        SampleClass.num +=1 #Jedes Mal, wenn eine Instanz erstellt wird, wird die Klassenvariable num um 1 erhöht.
        self.num = number #Speichern Sie die vom Generator beim Erstellen der Instanz empfangene Argumentnummer in der Instanzvariablen num.
    def __del__(self):
        SampleClass.num -=1 #Verringern Sie jedes Mal, wenn Sie eine Instanz löschen, 1 Klassenvariable num
        print("Diese Instanz wurde gelöscht")
$
$ python3
>>>

* Importieren * Sie das Modul * class_test *, um eine Instanz der Klasse * SampleClass * zu erstellen und zu löschen.

Terminal


>>> import class_test as ct
>>>
>>> sample_1 = ct.SampleClass()
>>> print(ct.SampleClass.num)
1
>>>
>>> print(sample_1.num)
1
>>>

(Punkte hier)

  1. Erstellt eine Instanz der Klasse * SampleClass *.
  2. Der Wert der Klassenvariablen * num *, die die Anzahl der Instanzen verwaltet, wird als 1 angezeigt.
  3. Außerdem wird der Wert der Instanzvariablen * num * der generierten Instanz * sample_1 * im Standardargument des Konstruktors auf 1 gesetzt.

Terminal


>>> sample_2 = ct.SampleClass(number=4)
>>> print(ct.SampleClass.num)
2
>>> print(sample_2.num)
4
>>>

(Punkte hier)

  1. Erstellt eine weitere Instanz der Klasse * SampleClass *.
  2. Der Wert der Klassenvariablen * num *, die die Anzahl der Instanzen verwaltet, wird als 2 angezeigt.
  3. Außerdem wird der Wert der Instanzvariablen * num *, die die generierte Instanz * sample_2 * hat, auf 4 gesetzt, die als Argument an den Konstruktor übergeben wurde, als * sample_2 * generiert wurde.

Terminal


>>> sample_3 = ct.SampleClass(number=15)
>>> print(ct.SampleClass.num)
3
>>> print(sample_3.num)
15
>>>

(Punkte hier)

  1. Erstellt eine weitere Instanz der Klasse * SampleClass *. Sie haben jetzt insgesamt 3 Instanzen erstellt.
  2. Der Wert der Klassenvariablen * num *, die die Anzahl der Instanzen verwaltet, wird als 3 angezeigt.
  3. Außerdem wird der Wert der Instanzvariablen * num *, die die generierte Instanz * sample_3 * hat, auf 15 gesetzt, die als Argument an den Konstruktor übergeben wurde, als * sample_3 * generiert wurde.

Von hier aus können Sie das Verhalten des Zerstörers überprüfen.

Terminal


>>> del sample_2
Diese Instanz wurde gelöscht
>>>

(Punkte hier)

  1. Der im * Zerstörer * der * SampleClass * -Klasse beschriebene * print ("Diese Instanz wurde gelöscht") wurde ausgeführt.
  2. Sie haben jetzt zwei Instanzen.

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
>>>

(Punkte hier)

  1. Der Wert der Klassenvariablen * num *, die die Anzahl der Instanzen verwaltet, wird als 2 angezeigt.
  2. Wenn Sie die Instanz mit dem Namen * sample_2 * löschen, können Sie feststellen, dass der in * destructor * beschriebene Prozess zum Dekrementieren der Klassenvariablen * num * ordnungsgemäß ausgeführt wurde.
  3. Zu diesem Zeitpunkt wurde auch bestätigt, dass sich die Instanzvariablen der beiden Instanzen (* sample_1 * und * sample_3 *) außer der gelöschten Instanz nicht im Wert geändert haben und nicht unbeabsichtigt betroffen waren. ..

(Zusatz)

Der Code wird kürzer, wenn die * import * -Anweisung wie folgt lautet.

Importanweisung (nach Änderung)


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
>>>

(Referenzwebseite)

  1. Verwendung des Python-Destruktors [für Anfänger]
  2. [Python] Finde die Anzahl der Instanzen
  3. Informationen zu Python-Klassen
  4. @ ysk24oks Qiita-Artikel "[Python] Import Stumbling Point"

Recommended Posts

Überprüfen Sie das Verhalten des Zerstörers in Python
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
Überprüfen Sie das Verhalten beim Zuweisen von Python
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
Überprüfen Sie die Existenz der Datei mit Python
Überprüfen Sie, ob die URL in Python vorhanden ist
Das Ergebnis der Installation von Python auf Anaconda
Überprüfen Sie den Pfad des importierten Python-Moduls
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
So überprüfen Sie die Speichergröße einer Variablen in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
[Python] Verhalten von Argmax
der Zen von Python
Geben Sie die Anzahl der CPU-Kerne in Python aus
[Python] Checklistenelemente alle, alle
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Überprüfen Sie, ob die Zeichen in Python ähnlich sind
Holen Sie sich den Aufrufer einer Funktion in Python
Passen Sie die Verteilung jeder Gruppe in Python an
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Kopieren Sie die Liste in Python
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Die Geschichte des Lesens von HSPICE-Daten in Python
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Lösen von Bewegungsgleichungen in Python (odeint)
Ausgabe in Form eines Python-Arrays
Überprüfen Sie die speicherinterne Byte-Zeichenfolge der Gleitkommazahl in Python
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Einfache Möglichkeit, die Quelle der Python-Module zu überprüfen
Erleben Sie die gute Berechnungseffizienz der Vektorisierung in Python
Auf dem Weg zum Ruhestand von Python2
So ermitteln Sie die Anzahl der Stellen in Python
Finde Fehler in Python
Überprüfen Sie, ob in Python externe Befehle vorhanden sind (z. B. `which`).
Python --Überprüfen Sie den Wertetyp
[Python] Ruft die Liste der im Modul definierten Klassen ab
Ändern Sie in Python das Verhalten der Methode je nach Aufruf
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Objektäquivalenzbeurteilung in Python
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Implementieren Sie die Lösung der Riccati-Algebra in Python
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Den Inhalt der Daten in Python nicht kennen
Überprüfen Sie die OpenSSL-Version von Python 2.6
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 4 von Hajipata in Python
Verwenden wir die offenen Daten von "Mamebus" in Python
Überprüfen Sie, ob in Java BigQuery-Tabellen vorhanden sind
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Heap Sort Edition)
[Python] Gibt alle Kombinationen von Elementen in der Liste aus
Implementierung der schnellen Sortierung in Python
Rufen Sie die URL des HTTP-Umleitungsziels in Python ab
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Über die Funktionen von Python
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 5 von Hajipata in Python