[Python-de] Von der Klasse set() erben

Georg Mischler schorsch at schorsch.com
Son Feb 6 20:24:13 CET 2005


Albert Hermeling wrote:

> class Newset(set):
>         def __init__(self,):
>                 set.__init__(self,)
>                 self.liste =3D []
>         def update(self, seg):
>                 set.update(self,seg)
>                 for i in seg:
>                         if not i in self.liste:
>                                 self.liste.append(i)
>
> Erzeuge ich jetzt zwei Objekte a und b und fühle sie mit a.update(range(5))
> bzw. b.update(range(3)) mit Werten, bilde aus a und b die Vereinigungsmenge
> in c ( c =3D a | b ) und will dann auf das Attribut liste von c zugreifen
> bekomme ich folgende Meldung:
>
> AttributeError: 'Newset' object has no attribute 'liste'


Laut Sourcen verwendet set.__or__() zur Erzeugung des Resultats
die Methode copy(). Diese Methode wiederum umgeht den normalen
Konstruktor, weil sie sonst nicht ein Newset, sondern nur ein
normales set erzeugen könnte. Damit dein Beispiel so
funktioniert, wie du das erwartest, solltest du also auch copy()
mit einer eigenen Version überschreiben.

In der Doku habe ich auf die Schnelle auch nichts gefundne, was
auf diesen Umstand hinweist.


-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/