Erweiterung der Tuple-Funktionalität
Verfasst: Freitag 13. April 2012, 08:15
Liebe Pythonphile,
zu Lernzwecken möchte ich gerne die Funktionalität des Tuple-Typs erweitern. Das heißt, dass ich z.B. eine append(element)-Funktion einführen möchte, die mir das (bzw. ein neues) Tuple wieder um ein Element erweitert zurück gibt.
Dazu hatte ich zwei Ansätze:
Mein bevorzugten Ansatz war, ein Objekt zu erzeugen, in dem einfach ein Tupel als Attribut gespeichert wird. Wenn das Objekt irgendwo verwendet wird, sollte dann allerdings direkt dieses Attribut verwendet werden. Der Trivialansatz wäre dann etwas in dieser Art:
Die Ausgabe sollte dann "(1,2,3,4)" sein (was es natürlich momentan nicht ist). Gibt es eine Möglichkeit, dies zu erreichen?
Alternativ könnte ich einfach vom Tuple erben:
Hier ist mir aber vollkommen unklar, wie ich jetzt einen append-Befehl implementieren könnte. Hat vielleicht jemand dazu eine Idee?
Vielen Dank
Jan
P.S. Dass dieses Projekt keinen praktischen Zweck hat, da die meisten Funktionen bereits im list-Typ implementiert sind, ist mir klar! Der Weg ist das Ziel.
zu Lernzwecken möchte ich gerne die Funktionalität des Tuple-Typs erweitern. Das heißt, dass ich z.B. eine append(element)-Funktion einführen möchte, die mir das (bzw. ein neues) Tuple wieder um ein Element erweitert zurück gibt.
Dazu hatte ich zwei Ansätze:
Mein bevorzugten Ansatz war, ein Objekt zu erzeugen, in dem einfach ein Tupel als Attribut gespeichert wird. Wenn das Objekt irgendwo verwendet wird, sollte dann allerdings direkt dieses Attribut verwendet werden. Der Trivialansatz wäre dann etwas in dieser Art:
Code: Alles auswählen
class KindOfTuple():
def __init__(self, elements):
self.t=tuple(elements)
def append(self, element):
self.t=self.t+(element,)
test=KindOfTuple((1,2,3))
test.append(4)
print(test)
Alternativ könnte ich einfach vom Tuple erben:
Code: Alles auswählen
class KindOfTuple(tuple):
def __new__(cls, *args, **kw):
return tuple.__new__(cls, *args, **kw)
Vielen Dank
Jan
P.S. Dass dieses Projekt keinen praktischen Zweck hat, da die meisten Funktionen bereits im list-Typ implementiert sind, ist mir klar! Der Weg ist das Ziel.