[Python-de] Frage zur Vererbung
Stefan Schwarzer
sschwarzer at sschwarzer.net
Do Sep 11 11:09:50 CEST 2014
Hallo Joachim,
On 2014-09-11 10:13, WehlackJ wrote:
> ich mache meine ersten Versuche mit der objektorientierten
> Programmierung. Folgendes Script reagiert für mich (noch) unverständlich.
> c1 und c2 greifen offenbar auf dieselben Variableninhalte zu, c hat
> anderer Variableninhalte von l1 und l2. Wie ist das zu verstehen?
>
> Mein Ziel wäre, dass c, c1, c2 auf dieselben Inhalte zugreifen können.
> [...]
>
> #!/usr/bin/python
> # -*- coding: utf-8 -*
>
> class C(object):
> l1=[];l2=[]
> def __init__(self,v1,v2):
> self.l1=v1
> self.l2=v2
Ich denke, das hier ist dein Problem. Nach diesen beiden
Zuweisungen "sieht" das hier instanziierte Objekt nur noch
die an `self.l1` und `self.l2` gebundenen Listen (also `v1`
und `v2`).
Was du vielleicht eher wolltest, ist
self.l1.extend(v1)
self.l2.extend(v2)
Das ändert die Listen `l1` und `l2` "in-place", was
wahrscheinlich das ist, was du wolltest. Da dann im
Gegensatz zu deinem Code keine Attribute `l1` und `l2` für
die Instanz angelegt werden, gibt dir `C_object.l1` das
Klassen-Attribut, für `l2` entsprechend.
> self.c1=C1()
> self.l1.append('a')
> self.l2.append('b')
Das hier hängt "a" an `v1` und "b" an `v2` an.
> self.c2=C2()
> print('c: l1:',self.l1,'l2:',self.l2)
Du kannst ja mal mit dem `is`-Operator experimentieren:
>>> v1 = [1, 2, 3]
>>> v2 = [4, 5, 6]
>>> c = C(v1, v2)
>>> c.l1 is v1
?
>>> c.l1 is C.l1
?
Viele Grüße
Stefan
Mehr Informationen über die Mailingliste python-de