Wie initialisiert man eine Instanz einer Unterklasse von Tupel in Python? [Duplikat]

8

Ich möchte eine Klasse definieren, die von tuple erbt, und ich möchte sie mit einer Syntax instanziieren, die nicht von tuple unterstützt wird. Für ein einfaches Beispiel möchte ich sagen, dass ich eine Klasse MyTuple definieren möchte, die von tuple erbt und die ich instanziieren kann, indem ich zwei Werte, x und y , übergebe, um das (my) Tupel% co_de zu erzeugen %. Ich habe den folgenden Code ausprobiert:

%Vor%

Aber als ich versucht habe, zum Beispiel (x, y) habe ich einen Fehler bekommen: MyTuple(2, 3) . Es scheint, dass meine TypeError: tuple() takes at most 1 argument (2 given) -Funktion nicht einmal aufgerufen wurde (basierend auf dem Fehler, den ich bekam und auf der Tatsache, dass meine "Debug-Nachricht" nicht gedruckt wurde).

Also, was ist der richtige Weg, dies zu tun?

Ich benutze Python 3.2.

    
Tom 29.09.2012, 12:24
quelle

2 Antworten

12
%Vor%

Eine der Schwierigkeiten bei der Verwendung von super besteht darin, dass Sie nicht kontrollieren, welche Klassenmethode mit dem gleichen Namen als nächstes aufgerufen wird. Daher müssen alle Methoden der Klassen die gleiche Signatur haben - mindestens die gleiche Anzahl von Elementen. Da Sie die Anzahl der an __new__ gesendeten Argumente ändern, können Sie super nicht verwenden.

Oder wie Lattyware vorschlägt, könnten Sie ein namedtuple definieren,

%Vor%     
unutbu 29.09.2012, 12:40
quelle
1

Ein anderer Ansatz wäre, ein Tupel zu kapseln, anstatt es zu erben:

%Vor%

Wie praktisch das ist, hängt davon ab, wie viele Funktionen und Modifikationen Sie benötigen und ob Sie isinstance(MyTuple(2, 3), tuple) benötigen.

    
ch3ka 29.09.2012 13:14
quelle

Tags und Links