Python-Klassen- und Instanzvariablen verstehen
In Python spielen Klassen- und Instanzvariablen eine entscheidende Rolle bei der Definition und Änderung des Objektverhaltens. Ihre unterschiedlichen Eigenschaften können jedoch zu Verwirrung führen. Dieser Artikel soll ihre Unterschiede verdeutlichen und erklären, warum eine Liste sowohl als Klassen- als auch als Instanzvariable erscheinen kann.
Klassenvariablen vs. Instanzvariablen
Klassenvariablen werden unter deklariert auf der Klassenebene und werden von allen Instanzen dieser Klasse gemeinsam genutzt. Sie werden normalerweise außerhalb der Konstruktormethode (__init__()) definiert. Instanzvariablen hingegen sind spezifisch für jede Instanz und werden im Konstruktor mithilfe des Attributs self definiert.
Beispiel 1: Klassenvariable
Der folgende Code Erstellt eine Klasse mit einer Klassenvariablenliste und einer Instanzvariablen self.list:
<code class="python">class testClass(): list = [] # Class variable def __init__(self): self.list.append('thing') # Instance variable</code>
In diesem Beispiel ist testClass.list eine Klassenvariable, die alle Instanzen von testClass gemeinsam nutzen. Wenn der Konstruktor aufgerufen wird, hängt er „thing“ an self.list an und erstellt so für jede Instanz eine Instanzvariable. Wenn Sie also auf p.list und f.list zugreifen, geben beide ['thing'] aus, da sie dieselbe Klassenvariable verwenden.
Beispiel 2: Instanzvariable
Im Gegensatz dazu, wenn Sie die Listenklassenvariable entfernen und sie im Konstruktor neu definieren:
<code class="python">class testClass(): def __init__(self): self.list = [] self.list.append('thing')</code>
Jede Instanz von testClass verfügt jetzt über eine eigene Instanzvariable self.list. Wenn Sie p.list und f.list aufrufen, geben beide ['thing'] aus, aber es handelt sich um separate Listen, die nicht zwischen Instanzen geteilt werden.
Variablenauflösung von Python
Dieses Verhalten ist auf den Variablenauflösungsprozess von Python zurückzuführen. Wenn Sie auf self.list zugreifen, sucht Python zunächst nach der Namensliste im Instanzobjekt. Wenn es nicht gefunden wird, durchsucht es die Klassendefinition.
Im ersten Beispiel wird self.list in die Klassenvariable aufgelöst, da in der Instanz kein Listenname definiert ist. Im zweiten Beispiel wird self.list in die Instanzvariable aufgelöst, da sie im Konstruktor definiert ist.
Fazit
Es ist wichtig, die Unterschiede zwischen Klassen- und Instanzvariablen zu verstehen für die effektive Arbeit mit Python-Objekten. Klassenvariablen werden von allen Instanzen gemeinsam genutzt, während Instanzvariablen für jedes Objekt spezifisch sind. Der Variablenauflösungsprozess von Python bestimmt, auf welche Variable zugegriffen wird, wenn Sie self.variable_name.
verwendenDas obige ist der detaillierte Inhalt vonHier sind einige fragenbasierte Titel, die zum Inhalt Ihres Artikels passen: * Python-Klassen- und Instanzvariablen: Warum wird eine Liste als beides angezeigt? * Python-Klassen- und Instanzvariablen verstehen:. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!