Können Literale in Python überschrieben werden?

Sie können den Titel nicht besser formulieren, zögern Sie nicht, ihn zu korrigieren.

Ich bin ziemlich neu in Python und experimentiere gerade mit der Sprache. Mir ist aufgefallen, dass nicht alle eingebauten Typen mit anderen Mitgliedern erweitert werden können. Ich möchte zum Beispiel eine hinzufügeneach Methode zumlist schreiben, aber das wäre unmöglich. Mir ist klar, dass es aus Effizienzgründen so konzipiert ist und dass die meisten integrierten Typen in C implementiert sind.

Nun, einer der Gründe, warum ich dieses Verhalten außer Kraft gesetzt habe, ist die Definition einer neuen Klasse, die sich erweitertlist aber sonst macht nichts. Dann kann ich die Variable zuweisenlist Für diese neue Klasse und jedes Mal, wenn ich eine neue Liste erstellen möchte, verwende ich dielist Konstruktor, wie es zum Erstellen des Originals verwendet worden wärelist Art.

class MyList(list):
    def each(self, func):
       for item in self:
           func(item)
list = MyList

my_list = list((1,2,3,4))
my_list.each(lambda x: print(x))

Ausgabe:

1
2
3
4

Die Idee kann natürlich verallgemeinert werden, indem eine Methode definiert wird, die einen erstellten Typ erhält und eine Klasse zurückgibt, die diesen Typ erweitert. Weiterhin das Originallist Die Variable kann in einer anderen Variablen gespeichert werden, um den Zugriff darauf zu behalten.

Das einzige Problem, mit dem ich gerade konfrontiert bin, ist das, wenn Sie a instanziierenlist durch seine wörtliche Form (d. h.[1,2,3,4]) wird der ursprüngliche Listenkonstruktor weiterhin verwendet (oder doch?). Gibt es eine Möglichkeit, dieses Verhalten zu überschreiben? Wenn die Antwort Nein lautet, kennen Sie eine andere Möglichkeit, dem Benutzer das Erweitern der integrierten Typen zu ermöglichen? (Genau wie bei Javascript können eingebaute Prototypen erweitert werden).

Ich finde diese Einschränkung der eingebauten Funktionen (die keine Mitglieder hinzufügen können) einen Nachteil von Python, der sie mit anderen benutzerdefinierten Typen unvereinbar macht ... Insgesamt mag ich die Sprache wirklich sehr und verstehe nicht, warum das so ist Einschränkung ist WIRKLICH notwendig.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage