Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse

instance.name

Wenn Sie eine Klassenvariable aufrufen, rufen Sie sie mit * instance * .name auf. Es gibt zwei Arten von Callees.

name


class foo:
    name1 = 'test1'
    def __init__(self):
        self.name2 = 'test2'

bar = foo()
print(bar.name1)
# => test1
print(bar.name2)
# => test2

Die Werte dieser beiden können auf die gleiche Weise geändert werden.

bar.name1 = 'huga'
bar.name2 = 'hogehoge'
print(bar.name1)
# => huga
print(bar.name2)
# => hogehoeg

Das Verhalten ändert sich jedoch wie folgt.

print(bar.__class__.name1)
# => test1
print(bar.__class__.name2)
# => AttributeError

Was ist die Ursache dafür? Tatsächlich gibt es zwei Arten von Variablen, die eine Klasse hat. Eine ist eine gewöhnliche Klassenvariable. Die andere ist eine dict-Variable, die als Basismitglied der Klasse vorhanden ist.

name


class foo:
    name1 = 'test1'
    def __init__(self):
        self.name2 = 'test2'

bar = foo()
print(bar.__dict__)
# => {'name2':'test2'}
bar.name1 = 'hoge'
print(bar.__dict__)
# => {'name2':'test2','name1':'hoge'}

Aufrufe wie * instance * .name zeigen vorzugsweise \ _ \ _dict \ _ \ _ [name] an. Rufen Sie \ _ \ _ class \ _ \ _ auf. Name nur, wenn \ _ \ _dict \ _ \ _ [Name] nicht vorhanden ist.

Wenn Sie eine Klassenvariable als Anfangswert oder als unveränderten Wert verwenden möchten, sollten Sie sie schreiben, ohne self zu verwenden. Wie name1. Wenn Sie immer mit dem in der Klasse angegebenen Wert verarbeiten möchten, sollten Sie ihn als self.class.name aufrufen. Ein weiterer Vorteil des Schreibens wie name1 besteht darin, dass es auf den Anfangswert zurückgesetzt werden kann.

name


class foo:
    name1 = 'test1'
    def __init__(self):
        self.name2 = 'test2'

bar = foo()
print(bar.name1)
# => test1
bar.name1 = 'newname'
print(bar.name1)
# => newname
del bar.name1
print(bar.name1)
# => test1

Sie können self.name nur deklarieren, wenn Sie erwarten, dass es sich ändert, oder wenn Sie sich den Wert vor der Änderung nicht merken müssen.

Recommended Posts

Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Unterschied zwischen list () und [] in Python
Unterschied zwischen == und ist in Python
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Referenzreihenfolge von Klassenvariablen und Instanzvariablen in "self. Klassenvariablen" in Python
[Python] Unterschied zwischen Klassenmethode und statischer Methode
Über den Unterschied zwischen "==" und "is" in Python
Python-Klassen- und Instanzvariablen
Unterschied zwischen return, return None und no return description in Python
Unterschied zwischen Java und Python (Memo)
In Python-Klassenvariablen versteckte Landminen
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
[Python] Unterschied zwischen Funktion und Methode
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
Python-Modul num2words Verhaltensunterschied zwischen Englisch und Russisch
Listenverkettungsmethode in Python, Unterschied zwischen list.extend () und dem Operator "+"
Unterschiede zwischen Ruby und Python im Umfang
Unterschiede zwischen Python- und Java-Syntax
Unterschiede in der Beziehung zwischen PHP und Python schließlich und beenden
[Python Iroha] Unterschied zwischen Liste und Tupel
[Python] Unterschied zwischen Rand- und Randn-Ausgabe
Unterschiede in der Multithread-Verarbeitung zwischen Python und Jython
Ich war süchtig nach falschen Klassenvariablen und Instanzvariablen in Python
Funktion zum Öffnen einer Datei in Python3 (Unterschied zwischen open und codecs.open und Geschwindigkeitsvergleich)
Fallklasse in Python
Python-Variablen und Datentypen, die mit Chemoinfomatik gelernt wurden
Ich habe eine Klasse in Python3 und Java geschrieben
Probleme mit pseudo-privaten Python-Variablen und Klassenvererbung
Klassennotation in Python
Unterschiede beim Schreiben von externem Quellcode zwischen Ruby und Python
[Python] Berechnung der Differenz von Datum und Zeit in Monaten und Jahren
Gegenseitige Konvertierung zwischen JSON und YAML / TOML in Python
Vergleiche "log and infininity" mit Gauche (0.9.4) und Python (3.5.1)
Beispiel für das Abrufen des Modulnamens und des Klassennamens in Python
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Finde Fehler in Python
Unterschied zwischen Regression und Klassifikation
Behandeln Sie Umgebungsvariablen in Python
Stapel und Warteschlange in Python
Python-Variablen und Objekt-IDs
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Unittest und CI in Python
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
[Python] Erläutert anhand eines Beispiels den Unterschied zwischen strftime und strptime im datetime-Modul
Installieren Sie OpenCV 3 (Core + Contrib) in der Windows- und Python 3-Umgebung. Unterschied zwischen OpenCV 2 und OpenCV 3 und einfache Funktionsprüfung
Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten
[Python] Wie man mit Klassenvariablen mit Dekorator und Metaklasse spielt
Zeigen Sie Zahlen und Zeichen an, die Variablen im Python-Druck zugewiesen sind
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
Holen Sie sich das aktuelle Datum und die aktuelle Uhrzeit in Python unter Berücksichtigung des Zeitunterschieds