Zusammengesetzte Zuweisung zu Python-Klassen-und Instanz-Variablen

Ich habe versucht zu verstehen, Python-Behandlung von Klasse und Instanz-Variablen. Insbesondere fand ich diese Antwort sehr hilfreich. Im Grunde es sagt, dass, wenn Sie deklarieren eine Klasse variable, und dann müssen Sie eine Zuordnung zu [instance].property werden Sie die Zuweisung an eine andere variable zusammen -- in einem anderen namespace, die von der Klasse variable.

So, dann überlegte ich, -- wenn ich will, dass jede Instanz meiner Klasse haben ein Mitglied mit einigen default-Wert (z.B. null), sollte ich es so machen:

class Foo:
    num = 0

oder so?

class Foo:
    def __init__(self):
        self.num = 0

Basiert auf, was ich früher gelesen, würde ich denken, dass das zweite Beispiel wäre der Initialisierung der 'rechts' - variable (Instanz anstelle der class-variable). Allerdings finde ich, dass die erste Methode funktioniert sehr gut, auch:

class Foo:
    num = 0

bar = Foo()
bar.num += 1 # good, no error here, meaning that bar has an attribute 'num'
bar.num
>>> 1
Foo.num
>>> 0 # yet the class variable is not modified! so what 'num' did I add to just now?

Also.. warum funktioniert das? Was bekomme ich nicht? FWIW, meine Vorherige Verständnis der OOP von C++, so die Erklärung durch Analogie (oder zeigen, wo es bricht unten) nützlich sein könnten.

InformationsquelleAutor int3 | 2010-03-11
Schreibe einen Kommentar