Referenzreihenfolge von Klassenvariablen und Instanzvariablen in "self. Klassenvariablen" in Python

Intro

Bei der Erläuterung des Konzepts von Klassenvariablen und Instanzvariablen in Python Für Variablen, die als Klassenvariablen, aber nicht als Instanzvariablen definiert sind, Ist es nicht seltsam, dass Sie mit der Notation der Instanzvariablen "self. Class variable name" zugreifen können? Mir ist aufgefallen. → Ich habe einen einfachen Code geschrieben und das Verhalten von "self. Class variable" bestätigt.

Was ich fand

Wenn Sie in Python auf "self.variable name" verweisen,

  1. Verweisen Sie zunächst auf die Instanzvariable
  2. ** Wenn die Instanzvariable nicht definiert ist, beziehen Sie sich auf die gleichnamige Klassenvariable, bevor Sie einen Fehler zurückgeben. ** ** **

Um eine Überlastung zu vermeiden, ist es sicherer, "class name.class variable name" zu schreiben, wenn auf eine Klassenvariable in einer Instanz verwiesen wird.

Beispielcode

self.py


class Hoge:
    id = 0

    @classmethod
    def dump_class(cls):
        print("Klassenvariable: ", cls.id)

    def construct(self, id):
        self.id = id

    def dump_instance(self):
        print("Instanzvariable: ", self.id)


if __name__ == "__main__":
    Hoge.dump_class()  # -> 0

    hoge_instance = Hoge()
    hoge_instance.dump_instance()  # -> 0,Wenn keine Instanzvariable definiert ist, wird auf die gleichnamige Klassenvariable verwiesen.
    hoge_instance.dump_class()  # -> 0

    hoge_instance.construct(id=10)  #Instanzvariablen definieren
    hoge_instance.dump_instance()  # -> 10,Die Referenz der Instanzvariablen hat Vorrang
    hoge_instance.dump_class()  # -> 0

Referenz

Wenn Sie auf Klassenvariablen zugreifen, sollten Sie vermeiden, auf sie wie "instance.class-Variablen" oder "self.class-Variablen" zuzugreifen, es sei denn, Sie haben einen bestimmten Grund dafür. In Python können Instanzvariablen aus Instanzobjekten erstellt werden, wodurch Klassenvariablen mit Instanzvariablen unbeabsichtigt ausgeblendet werden können. Python-Klassenvariablen und Instanzvariablen | UX MILK

Recommended Posts

Referenzreihenfolge von Klassenvariablen und Instanzvariablen in "self. Klassenvariablen" in Python
Python: Klassen- und Instanzvariablen
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Python-Klassen- und Instanzvariablen
Ich war süchtig nach falschen Klassenvariablen und Instanzvariablen in Python
Globalisierung von Klasseninstanzvariablen
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Beispiel für das Abrufen des Modulnamens und des Klassennamens in Python
In Python-Klassenvariablen versteckte Landminen
Python-Klassendefinitionen und Instanzbehandlung
Reputation von Python-Büchern und Nachschlagewerken
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
Beispiel für die Verwendung von Klassenvariablen und Klassenmethoden
Verweisen auf Umgebungsvariablen in Python in Blender
[Python] Ruft eine Liste der Instanzvariablen ab
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
[Python] -Klasse, Instanz
Python-Klasse, Instanz
Python-Variablen und Datentypen, die mit Chemoinfomatik gelernt wurden
[Python] Kapitel 02-01 Grundlagen von Python-Programmen (Operationen und Variablen)
Probleme mit pseudo-privaten Python-Variablen und Klassenvererbung
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
[Python] Klassentyp und Verwendung des datetime-Moduls
Über Klasse und Instanz
Fallklasse in Python
Klassennotation in Python
Natürliche Ordnung in Python
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Berechnung der Standardabweichung und des Korrelationskoeffizienten in Python
[Python] Berechnung der Differenz von Datum und Zeit in Monaten und Jahren
[Python] So sortieren Sie Diktate in Listen und Instanzen in Listen
Warum ist das erste Argument der [Python] -Klasse selbst?
Zusammenfassung der Datumsverarbeitung in Python (Datum / Uhrzeit und Datum)
So erreichen Sie den Zugriff durch Attribut und Beibehaltung der Einfügereihenfolge in Python dict
Ich habe die Geschwindigkeit der Referenz des Pythons in der Liste und die Referenz der Wörterbucheinbeziehung aus der In-Liste verglichen.
Ich habe Probleme mit der Vererbung von Instanzvariablen in Python
Informationen zu Python-Variablen und -Objekten
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
[Python] Wie man mit Klassenvariablen mit Dekorator und Metaklasse spielt
Objektäquivalenzbeurteilung in Python
Zeigen Sie Zahlen und Zeichen an, die Variablen im Python-Druck zugewiesen sind
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Stapel und Warteschlange in Python
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
[Python] Stärken und Schwächen von DataFrame in Bezug auf den Zeitaufwand
Python-Variablen und Objekt-IDs
[Tipps] Probleme und Lösungen bei der Entwicklung von Python + Kivy
Unittest und CI in Python
Implementierung der schnellen Sortierung in Python
Quellinstallation und Installation von Python
Python # Über Referenz und Kopie
Ich möchte die Frage nach der Methode "__init__" und dem Argument "self" der Python-Klasse klären.
Zählen Sie die Anzahl der thailändischen und arabischen Zeichen in Python gut
Erstellen Sie Ihre eigene Diagrammstrukturklasse und deren Zeichnung mit Python
[Python] Ermittelt den Rang der Werte in der Liste in aufsteigender / absteigender Reihenfolge
Liste der in Python verfügbaren Löser und Modellierer für lineares Design (LP)
Ich bin gestorben, weil ich dachte, eine Python-Klassenvariable sei eine Instanzvariable