Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Klassenvariablen und Instanzvariablen

Python-Klassenvariablen und Instanzvariablen

(*-*)浩
(*-*)浩Original
2019-10-31 10:56:264209Durchsuche

Wir wissen, dass die in der Klasse definierten Attribute oder Methoden nicht direkt außerhalb der Klasse aufgerufen werden können. Daher können wir die Klasse vollständig als unabhängigen Bereich (als Klassennamespace bezeichnet) betrachten, ebenso wie die Klassenattribute eigentlich im Klassennamensraum definierte Variablen (Klassenmethoden sind eigentlich im Klassennamensraum definierte Funktionen).

Python-Klassenvariablen und Instanzvariablen

Je nach dem Ort, an dem das Attribut definiert ist, können Klassenattribute in Klassenattribute (anschließend dargestellt durch Klassenvariablen) und Instanzattribute (anschließend dargestellt durch Instanzvariablen) unterteilt werden. .

Klassenvariablen (Klassenattribute) (Empfohlenes Lernen: Python-Video-Tutorial)

Klassenvariablen beziehen sich auf die in der Klasse definierten, jedoch in Variablen außerhalb jeder Klassenmethode. Das Merkmal von Klassenvariablen besteht darin, dass alle instanziierten Objekte einer Klasse den Wert der Klassenvariablen gemeinsam nutzen können, dh Klassenvariablen können in allen instanziierten Objekten als öffentliche Ressourcen verwendet werden.

Beachten Sie, dass der direkte Zugriff auf Klassenvariablen über Klassennamen empfohlen wird, der Zugriff jedoch auch über Objektnamen möglich ist.

Zum Beispiel definiert der folgende Code eine Adressklasse und mehrere Klassenattribute für die Klasse:

class Address :
    detail = '广州'
    post_code = '510660'
    def info (self):
        # 尝试直接访问类变量
        #print(detail) # 报错
        # 通过类来访问类变量
        print(Address.detail) # 输出 广州
        print(Address.post_code) # 输出 510660
#创建 2 个类对象
addr1 = Address()
addr1.info()
addr2 = Address()
addr2.info()
# 修改Address类的类变量
Address.detail = '佛山'
Address.post_code = '460110'
addr1.info()
addr2.info()

In diesem Programm definieren die zweite und dritte Codezeile zwei Klassenvariablen. Wenn die info()-Methode des Adressobjekts zum ersten Mal im Programm aufgerufen wird, um zwei Klassenvariablen auszugeben, werden die Anfangswerte der beiden Klassenvariablen ausgegeben. Als nächstes ändert das Programm die Werte der beiden Klassenvariablen über die Adressklasse. Wenn das Programm also die beiden Klassenvariablen zum zweiten Mal über die Methode info () ausgibt, werden die geänderten Werte der beiden Klassenvariablen geändert ausgegeben werden.

Führen Sie den obigen Code aus und Sie sehen die folgende Ausgabe:

广州
510660
广州
510660
佛山
460110
佛山
460110

Wie Sie der Ausgabe entnehmen können, teilen sich addr1 und addr2 Klassenvariablen. Mit anderen Worten: Ändern des Werts der Klasse Die Variable funktioniert für alle instanziierten Objekte dieser Klasse.

Instanzvariablen beziehen sich auf Attribute, die in Methoden einer Klasse definiert sind. Ihr Merkmal ist, dass sie nur auf das Objekt wirken, das die Methode aufruft.

Beachten Sie, dass auf Instanzvariablen nur über Objektnamen und nicht direkt über Klassennamen zugegriffen werden kann.

Python ermöglicht den Zugriff auf Klassenvariablen über Objekte, der Wert von Klassenvariablen kann jedoch nicht über Objekte geändert werden. Denn das Ändern des Werts einer Klassenvariablen über ein Objekt bedeutet nicht, „der Klassenvariablen einen Wert zuzuweisen“, sondern eine neue Instanzvariable zu definieren.

Zum Beispiel das folgende Programm:

class Inventory:
    # 定义两个类变量
    item = '鼠标'
    quantity = 2000
    # 定义实例方法
    def change(self, item, quantity):
        # 下面赋值语句不是对类变量赋值,而是定义新的实例变量
        self.item = item
        self.quantity = quantity
# 创建Inventory对象
iv = Inventory()
iv.change('显示器', 500)
# 访问iv的item和quantity实例变量
print(iv.item) # 显示器
print(iv.quantity) # 500
# 访问Inventory的item和quantity类变量
print(Inventory.item) # 鼠标
print(Inventory.quantity) # 2000

Im obigen Programm weisen die 8. und 9. Codezeile den Artikel- und Mengenvariablen anhand von Beispielen Werte zu , was Klassenvariablen sehr ähnlich sieht, aber nicht, was sie tun: zwei Instanzvariablen neu definieren.

In einer Klasse können Instanzvariablen und Klassenvariablen denselben Namen haben. In diesem Fall kann die Verwendung des Klassenobjekts jedoch nicht die Klassenvariable aufrufen, da die Instanzvariable bevorzugt wird. Dies ist also der Fall Auch aus dem Grund „Klassenvariablen verwenden Objektnamenaufruf“ nicht empfohlen.

Nach dem Aufruf der Methode change() des Inventory-Objekts greift das obige Programm auf die Artikel- und Mengenvariablen des Inventory-Objekts zu. Da das Objekt selbst über diese beiden Instanzvariablen verfügt, gibt das Programm die Instanzvariablen von aus der Objektwert; als nächstes greift das Programm über Inventar auf seine Klassenvariablen zu.

Führen Sie das obige Programm aus und Sie sehen die folgende Ausgabe:

显示器
500
鼠标
2000

Das obige ist der detaillierte Inhalt vonPython-Klassenvariablen und Instanzvariablen. 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