Python-Klassen- und Instanzvariablen

Um eine Klassenvariable in Python zu definieren, müssen Sie die Variable unter dem Klassennamen deklarieren. Das steht in der offiziellen Dokumentation.

https://docs.python.jp/3/tutorial/classes.html#class-and-instance-variables

sample.py


   class Sample:
     name = 'name'
   
   s  = Sample()
   s2 = Sample()
   
   print(s.name) # 'name'
   print(s2.name) # 'name'

Offensichtlich werden beide als "Name" angezeigt.

Wenn Sie den Namen jedoch so ändern, handelt es sich nicht mehr um eine Klassenvariable.

sample.py


   s  = Sample()
   s2 = Sample()
   
   s.name = 'aaaa' 
   
   print(s.name) # 'aaaa'
   print(s2.name) # 'name'

Wenn Sie dies tun, wird s.name als aaaa und s2.name als name angezeigt. Wenn es von allen Objekten gemeinsam genutzt wird, sollte sich s2.name ebenfalls in "aaaa" ändern.

Die Antwort lautet, dass Zeichenfolgen unveränderlich sind. Wenn Sie also über ein Objekt auf sie verweisen, werden automatisch Instanzvariablen erstellt.

Aber als ich Sample.name ausprobierte, änderten sich beide zu aaaa. Es hat Eigenschaften als Klassenvariable. Wird es durch Lesen der Luft interpretiert, je nachdem, ob die Referenzquelle eine Klasse oder ein Objekt ist?

Arrays und Wörterbuchtypen sind veränderbar, daher werden die Änderungen im Folgenden weitergegeben und beide Ausdrucke werden als "[1,2,3,4]" angezeigt. Es ist natürlich, weil es auf dasselbe hinweist.

sample.py


   class Sample:
     a_list = [1,2,3]
   
   s  = Sample()
   s2 = Sample()
   s.a_list.append(4)
   print(s.a_list)  # [1,2,3,4]
   print(s2.a_list) # [1,2,3,4]

Zwangsweise zusammenfassen

Ich frage mich, ob es in Ordnung ist zu sagen, dass selbst wenn Sie eine unveränderliche Klasse deklarieren, diese automatisch zu einer Instanzvariablen wechselt und die veränderbare Variable eine Klassenvariable bleibt. Im Prinzip werde ich es teilen. Unveränderliche Daten werden jedoch zu Instanzvariablen, wenn über Objekte zugegriffen wird.

Ich frage mich, ob es eine solche Spezifikation ist.

Recommended Posts

Python: Klassen- und Instanzvariablen
Python-Klassen- und Instanzvariablen
Python-Klasse, Instanz
Über Klasse und Instanz
Referenzreihenfolge von Klassenvariablen und Instanzvariablen in "self. Klassenvariablen" in Python
Ich war süchtig nach falschen Klassenvariablen und Instanzvariablen in Python
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Probleme mit pseudo-privaten Python-Variablen und Klassenvererbung
Informationen zu Python-Variablen und -Objekten
Globalisierung von Klasseninstanzvariablen
Python-Variablen und Objekt-IDs
Klassenvariable
[Python] -Variablen
Ordnungsgemäße Verwendung der Instanzmethode und der Klassenmethode
Perl-Objekt und Python-Klasse Teil 2.
Perl-Objekt und Python-Klasse Teil 1.
[Python] Erbt eine Klasse mit Klassenvariablen
Python-Klassen und -Instanzen, Instanzmethoden
[Python] Wie man mit Klassenvariablen mit Dekorator und Metaklasse spielt
"Kanrika" die Python-Klasse
Beispiel für die Verwendung von Klassenvariablen und Klassenmethoden
[Python] Unterschied zwischen Klassenmethode und statischer Methode
[Python] Ruft eine Liste der Instanzvariablen ab
Python ist eine Instanz
Ich bin gestorben, weil ich dachte, eine Python-Klassenvariable sei eine Instanzvariable
# Python-Grundlagen (Klasse)
Apropos Python-Klassenattribute und Metaklassen
Python-Variablen und Datentypen, die mit Chemoinfomatik gelernt wurden
Ich habe eine Klasse in Python3 und Java geschrieben
Python: Bereiten Sie einen Serializer für die Klasseninstanz vor:
[Python] Kapitel 02-01 Grundlagen von Python-Programmen (Operationen und Variablen)
[Python] So sortieren Sie Instanzen nach Instanzvariablen
[Python] Klassentyp und Verwendung des datetime-Moduls
[Python] Komprimieren und dekomprimieren
Python-Syslog-Wrapper-Klasse
Python-Memorandum-Nummerierungsvariablen
Python- und Numpy-Tipps
Globale und lokale Variablen 2
[Python] Pip und Wheel
Fallklasse in Python
Python Iterator und Generator
[Python] Klassenvererbung (super)
Python selbst erstellte Klassensortierung
Grundmethode der [Python] -Klasse
Python-Pakete und -Module
Vue-Cli- und Python-Integration
Ruby, Python und Map
[Python] Klassenvererbung, überschreiben
Python-Eingabe und Ausgabe
Python und Ruby teilen sich
Python-Subprozess-Wrapper-Klasse
Metaklasse und Instanz
Klassen- und statische Methoden
Python asyncio und ContextVar
YOLO Python-Wrapper-Klasse
Klassennotation in Python