Heim  >  Artikel  >  Backend-Entwicklung  >  Hier 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:

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

Susan Sarandon
Susan SarandonOriginal
2024-10-26 01:59:03294Durchsuche

Here are a few question-based titles that fit the content of your article:

* Python Class and Instance Variables: Why Does a List Appear as Both?
* Understanding Python Class and Instance Variables: How Do They Work Together?
* Class vs. Instance Variabl

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.

verwenden

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn