Dict bei Klassenvererbung

29/06/2008 - 14:43 von Thomas Bach | Report spam
Hi,

gegeben folgender Code:




class A:






... v = 0
... d = {}
... def f(self, val):
... self.d[val]='blah'
... self.v=val
...



class B(A):






... pass
...



b=B()
b.f('blah')
b.f('bar')
b.v






'bar'



b.d






{'blah': 'blah', 'bar': 'blah'}

Soweit, so gut, so einfach. Nun aber:




A.v






0



A.d






{'blah': 'blah', 'bar': 'blah'}

*Kopfkratz*

Wieso wird hier das Dictionary der Klasse genommen und kein spezielles
Dict für das gegebene Objekt?
Wie erreiche ich es, dass das Dict genauso behandelt wird, wie mein
value?

Danke und Grüßle,
Thomas.

PS: Als absoluter Neuling in Python bin ich doch so begeistert, dass ich
heute Abend eher programmieren würde, als Fussball zu gucken!
 

Lesen sie die antworten

#1 Marc BlackJack Rintsch
29/06/2008 - 17:09 | Warnen spam
On Sun, 29 Jun 2008 14:43:54 +0200, Thomas Bach wrote:

Hi,

gegeben folgender Code:

>>> class A:
... v = 0
... d = {}
... def f(self, val):
... self.d[val]='blah'
... self.v=val
...
>>> class B(A):
... pass
...
>>> b=B()
>>> b.f('blah')
>>> b.f('bar')
>>> b.v
'bar'
>>> b.d
{'blah': 'blah', 'bar': 'blah'}

Soweit, so gut, so einfach. Nun aber:

>>> A.v
0
>>> A.d
{'blah': 'blah', 'bar': 'blah'}

*Kopfkratz*

Wieso wird hier das Dictionary der Klasse genommen und kein spezielles
Dict für das gegebene Objekt?



Weil Du das Dictionary auf Klassenebene definiert hast.

Wie erreiche ich es, dass das Dict genauso behandelt wird, wie mein
value?



Da gibt es nichts zu erreichen. Die werden schon gleich behandelt. Der
Unterschied ist hier, dass Du beim Value den Namen `v` neu bindest und
beim Dictionary ein vorhandendes Dictionary verànderst.

Die erste Zeile der Methode sucht nach einem `self.d`, wird am Exemplar
nicht fündig, schaut also in der Klasse nach, und ggf. in der Basisklasse,
findet dort das Dictionary und tràgt dem Wert zu dem Schlüssel ein.

Die zweite Zeile erzeugt auf dem Exemplar das Attribut `v` und bindet den
Wert daran.

Ciao,
Marc 'BlackJack' Rintsch

Ähnliche fragen