Hat Python Konvertierungsoperatoren?

7
Ich denke nicht, aber ich dachte, ich würde nur für den Fall fragen. Zum Beispiel für die Verwendung in einer Klasse, die ein int einkapselt:

%Vor%

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%     
Alex 12.07.2009, 22:59
quelle

5 Antworten

3

manchmal ist vielleicht nur die Unterklasse von int direkt genug. dann müssen __add__ und __radd__ keine Kosten verursachen.

%Vor%     
sunqiang 13.07.2009, 01:50
quelle
11

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%     
ars 12.07.2009 23:09
quelle
3

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.

    
liori 12.07.2009 23:13
quelle
3

Benötigen Sie das?

%Vor%     
del-boy 12.07.2009 23:03
quelle
0

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.

%Vor%

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__ .

    
ayce 21.02.2018 22:37
quelle

Tags und Links