Die Python-Elementvariable der Instanz funktioniert wie die Elementvariable und einige funktionieren wie die statische Variable

8

Ich bin Python-Neuling, und Member-Variable der Klasse funktioniert seltsam in meinem Python-Code. einige funktionieren wie normale Variable, aber manche funktionieren wie statische Variable!

%Vor%

Ergebnis

%Vor%

aber das letzte Ergebnis des Tests unterscheidet sich von dem, was ich im letzten Test erwartet habe. Es sollte kein "A" im "list_value" der Instanz von "b" sein. Es wurde gerade erstellt und wurde nie vorher 'A' hinzugefügt. Ich fügte der Instanz von 'a', nicht 'b' 'A' hinzu. Aber das Ergebnis zeigt mir, dass es auch 'A' in 'b' gibt Außerdem funktionieren der 'list_value' und der 'value' in der Klasse anders. Es sieht so aus, als hätten beide dieselbe Syntax. Warum arbeiten sie anders?

    
jinhwan 20.03.2012, 04:26
quelle

2 Antworten

17

Das sind Klassenvariablen. Um Instanzvariablen zu erstellen, initialisieren Sie sie in der Funktion __init__ :

%Vor%

Der Grund, dass sich value wie Instanzvariablen verhält, liegt daran, dass Sie es mit self.value einstellen. Wenn Python self.X sieht, sieht es aus, wenn in Ihrem Objekt eine Eigenschaft X vorhanden ist, und wenn keine vorhanden ist, wird die Klasse betrachtet. Da Sie nie self.list_value setzen, greift es auf die Klassenvariable zu, die von allen Instanzen gemeinsam genutzt wird. Daher werden alle Änderungen in jedem anderen Objekt widergespiegelt.

    
mgibsonbr 20.03.2012, 04:30
quelle
3

Der Hauptunterschied besteht darin, dass Sie an list_value anhängen und Sie value zuweisen. Sie werden "Klassenvariablen" genannt. Jede Instanz hat ihre eigene Referenz auf die Klassenvariable, weshalb die Liste geteilt wird. Wenn Sie jedoch zuweisen, ändern Sie den Verweis der Instanz, um auf eine andere Variable zu zeigen, was das Verhalten von value erklärt.

Wenn Sie nach dem Variablenverhalten von list_value suchen, initialisieren Sie es stattdessen im Konstruktor (eine Klassenmethode namens __init__ ).

    
Aaron Dufour 20.03.2012 04:34
quelle

Tags und Links