Ja, aber das „y von A“ ist kein „y von A“ das y gehört zu der Funktion A.printxy und nicht zu A. Der Namensraum der Klassendefinition überlebt die Klassendefinition selbst übrigens nicht. Die dort definierten Namen landen alle in dem Attribut-Dictionary der Klasse und sind nur noch über die Klasse selbst ansprechbar(deswegen musst du auch immer über self auf Attribute zugreifen, weil sie anders nicht sichtbar sind). Klassendefinitionen sind übrigens normale Code-Blöcke, du kannst da also auch for-Schleifen und allen anderen Kram verwenden.mechanicalStore hat geschrieben:Ich gehe davon aus, Du meinst nicht wirklich "überschreiben". Worauf ich hinaus wollte, ist:
Kann ich innerhalb B auch auf das y von a zugreifen und umgekehrt?Code: Alles auswählen
>>> class A(object): ... staticvarA = 5 ... def printxy(self): ... x = 'xa' ... y = 'ya' ... class B(object): staticvarB = 6 ... def printxy(self): ... y = 'yb' ... print x, y ... b = B() ... b.printxy()
In B.printxy allerdings ist das „y von A“ nicht mehr sichtbar, da du es mit einer lokalen Variable überschrieben hast. Das kannst du verhindern indem du sie explizit mit nonlocal deklarierst(ab Python 3) verwendest.
Nein, es gibt keine statischen Variablen in Python. staticvarA ist eine Klassenvariable(also ein Attribut des Klassenobjekts). Klassenvariablen kannst entweder über das Klassenobjekt selbst ansprechen(A.staticvarA) oder über die Instanz (self.staticvarA). Wenn du allerdings über die Instanz diesem Attribut einen neuen Wert zuweist(self.staticVarA = 23) wird sie zu einer Instanzvariable. An den Wert der Klassenvariable kommst du dann nur noch über das Klassenobjekt.Gleiches gilt für staticvarA und staticvarB, und; sind diese in dem Fall statisch?
Ist jetzt vielleicht etwas viel auf einmal, ich würd' gern noch ein Beispiel zu Verdeutlichung geben, hab allerdings dafür grade keine Zeit.