Und ich bin nicht nur an diesem int-Beispiel interessiert, ich habe nach etwas sauberem und allgemeinem gesucht und nicht jede int- und String-Methode außer Kraft gesetzt.
Danke, Sunqiang. Genau das wollte ich. Ich wusste nicht, dass Sie diese unveränderlichen Typen (die von C ++ kommen) unterklassifizieren können.
%Vor%Dies sollte tun, was Sie brauchen:
%Vor%Ausgabe:
%Vor%Weitere Informationen suchen Sie in den folgenden Dokumenten nach "radd":
Sie finden andere solche Methoden für "richtige Addition", "rechte Subtraktion", etc.
Hier ist ein weiterer Link, der die gleichen Operatoren abdeckt:
Übrigens hat Python Casting-Operatoren:
Aber sie werden nicht erreichen, was Sie in Ihrem Beispiel brauchen (im Grunde, weil Methoden keine Typ-Annotation für Parameter haben, also gibt es keine gute Möglichkeit, implizit zu transponieren). So können Sie das tun:
%Vor%Aber das wird scheitern:
%Vor%Sie werden keine Konvertierungsoperatoren wie in C ++ bekommen, weil Python nicht diese Art von statischem System hat. Die einzigen automatischen Konvertierungsoperatoren sind solche, die numerische Standardwerte verarbeiten (int / float); Sie sind in der Sprache vordefiniert und können nicht geändert werden.
Typ "Konvertierung" wird normalerweise von Konstruktoren / Fabriken durchgeführt. Sie können dann Standardmethoden wie __add__
überladen, damit es mehr wie andere Klassen funktioniert.
Tut mir leid, dass ich 8,5 Jahre zu spät zur Party gekommen bin.
Sie können von einem unveränderlichen (dh. Int) ableiten. Sie können __init__
nicht definieren, da das unveränderliche Objekt bereits erstellt wurde und nicht geändert werden kann (per Definition). Hier kommt __new__
zum Einsatz.
Nun, um Ihre Frage zu Konvertierungsoperatoren zu beantworten. Sie können auch __int__
, __long__
, __float__
und natürlich __str__
definieren. Um ein beliebiges Objekt zu konvertieren oder in ein beliebiges Objekt zu konvertieren, müssen Sie höchstwahrscheinlich das andere Objekt ändern, um das gewünschte Objekt zu erhalten. Sie können die Methode __new__
dieses anderen Objekts verwenden. Oder wenn das andere Objekt bereits erstellt wurde, versuchen Sie es mit __call__
.