2017-06-15 2 views
1

Wenn ich eine einfache KlasseSind Klassenvariablen veränderbar?

class someClass(): 
    var = 1 

x = someClass() 
someClass.var = 2 

x.var gleich machen Dies wird definieren 2. Dies ist verwirrend, weil normalerweise so etwas wie dieses, wie:

a = 1 
b = a 
a = 2 

b intakt als b==1 verlassen wird. Warum ist das bei Klassenvariablen nicht das Gleiche? Wo ist der Unterschied? Kann alle Klassenvariablen veränderbar aufrufen? In gewisser Weise funktionieren die Klassenvariablen eher wie das Zuweisen einer Liste zu a=[1] und tun a[0]=2.

Grundsätzlich ist das Problem, wie ist x.var acessing someClass.var muss es etwas anderes als dann verwendet wird, wenn zwei Variablen in Python gleich gesetzt sind. Was ist los?

+2

jetzt gesetzt 'x.var = 3' und sehen, was mit' someClass.var' passiert –

+0

Ich weiß, aber das ist nicht der Punkt – pindakaas

+1

Nein, das * ist * der Punkt. Im Wesentlichen, wenn Sie 'SomeClass.var' und' someInstance.var' ** sind nicht unbedingt das gleiche Ding **. –

Antwort

1

var ist eine statische Klassenvariable someClass.

Wenn Sie x.var bekommen erreichen, y.var oder some_other_instance.var, können Sie die gleiche Variable zugreifen, keine Instanz abgeleitet ein (solange man nicht speziell hat es auf die Instanz als Eigenschaft zugeordnet).

+1

Also wenn ich x.var = 2 benutze ich im Grunde eine neue Variable in x, die die Variable in someClass in diesem Fall Schatten? – pindakaas

+0

@pindakaas Bingo! – deceze

+0

@ Erdnussbutter Yup. – Uriel