[Python-de] Unterklassen von eingebauten Typen definieren

Gregor Lingl glingl at aon.at
Sun Sep 29 19:50:35 EDT 2002


Hallo pythonistas!

Ich möchte gerne folgendes wissen:

Ich leite eine Klasse in folgender Weise vom
eingebauten Typ list ab:

 >>> class L(list):
    pass

 >>> a = L()
 >>> a
[]
 >>> b = L([1,2,3])
 >>> b
[1, 2, 3]
 >>> c = L("xyz")
 >>> c
['x', 'y', 'z']
 >>>

L scheint list als Konstruktor zu benützen, oder
es verhält sich wenigstens so als ob.

Nächstes Beispiel:

 >>> class M(list):
    def __init__(self, x):
        self.x = x

       
 >>> e = M(3)
 >>> e
[]
 >>> e.x
3

Der Konstruktor von M konstruiert nur leere Listen.
Wie kann ich einen Konstruktor definieren, der zum Beispiel
als erstes Argument eine Sequenz übernimmt um sich als Liste
zu initialisieren und dann noch weitere Argumente für andere
Zwecke?

Die Klasse sollte sich dann so verhalten:

 >>> class N(list):
    def __init__(self, seq, x):
        self.x = x
        self.extend(seq)
      
 >>> f = N( (3,4,5), "C" )
 >>> f
[3, 4, 5]
 >>> f.x
'C'
 >>>


Mir scheint jedoch, dass das nicht der kanonsche Weg ist, solche
Dinge zu erledigen, denn er hängt von der Existenz der Methode
extends ab, die es nur für Listen gibt. Dagegen stellt sich das
angegebene Problem allgemein bei der Definition von Unterklassen
für eingebauten Typen.

Wer weiß, wie das "regelgerecht" gemacht wird?

mit freundlichen Grüßen,
Gregor







More information about the Python-de mailing list