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

Georg Mischler schorsch at schorsch.com
Mon Feb 7 02:06:38 CET 2005


Albert Hermeling wrote:

> Deine Vorschlag die copy Methode zu überschreiben funktionierte nicht. Es
> reicht die Methode __or__ zu überschreiben. Wenn ich die copy Methode
> überschreiben bekomme ich immer ein None Objekt zurück. Da ich gerne dazu
> lerne würde ich gerne wissen warum das so ist.

Nach nochmaliger Betrachtung war dieser Punkt wohl ein Denkfehler
meinerseits, aber None sollte deswegen trotzdem nicht rauskommen.
Tatsächlich ist es nicht die Python-Methode copy(), sondern die
dahinterliegende Funktion set_copy() in C, welche direkt
aufgerufen wird. Damit bleibt das Überschreiben von copy() für
deine Zwecke schlicht wirkungslos, und ich habe dich erst mal auf
die falsche Fährte geschickt.

Der ganze interne Aufwand scheint nur den einen Zweck zu haben,
dass binäre Operatoren zwischen set und frozen_set jeweils ein
neues Objekt vom Typ des linken Operanden zurückgeben können.
Das ist zwar raffiniert, aber nicht allgemein genug gelöst, um
für abgeleitete Klassen vernünftig nutzbar zu sein.  Dass du dann
mit c = a | b ein (nur halb initialisiertes) Newset kriegst,
sieht eher nach einem unbeabsichtigten Nebeneffekt aus, der einem
leicht zu falschen Schlüssen verleiten kann.

So einfach ist es offenbar auch für die Core-Entwickler nicht,
die Unterschiede zwischen eingebauten und in Python geschriebenen
Klassen zu überbrücken...


-schorsch

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