funktioniert die python conversion-Betreiber?
Ich denke nicht so, aber ich dachte, ich würde Fragen, just in case. Beispielsweise für den Einsatz in einer Klasse kapselt int:
i = IntContainer(3)
i + 5
Und ich bin nicht nur daran interessiert, diese int Beispiel, ich war auf der Suche nach etwas sauber und allgemein, überschreiben nicht jeden int-und string-Methode.
Dank, sunqiang. Das ist genau das, was ich wollte. Ich wusste nicht, Sie könnten diese Unterklasse unveränderliche Typen (aus C++).
class IntContainer(int):
def __init__(self,i):
#do stuff here
self.f = 4
def MultiplyBy4(self):
#some member function
self *= self.f
return self
print 3+IntContainer(3).MultiplyBy4()
Du musst angemeldet sein, um einen Kommentar abzugeben.
manchmal vielleicht auch nur Subklasse von int direkt genug ist. dann
__add__
und__radd__
müssen nicht verkleiden.Sollte dies tun, was Sie brauchen:
Ausgabe:
Weitere Informationen suchen Sie nach "radd" in der folgenden Dokumentation:
Finden Sie andere solche Methoden, die für "rechts neben", "rechts Subtraktion", etc.
Hier ist noch ein link, die dasselbe Betreiber:
Durch die Art und Weise, Python hat casting-Operatoren:
Aber, dass Sie das nicht erreichen, was Sie brauchen, in Ihrem Beispiel (im Grunde, weil die Methoden haben keine geben Sie eine Anmerkung für Parameter, so dass es keinen guten Weg zu werfen implizit). Damit Sie dies tun können:
Aber dies schlägt fehl:
Wirst du nicht bekommen-Konvertierung Operatoren wie in C++, weil Python nicht über diese Art von starken statischen Typsystem. Die einzige automatische Konvertierung Operatoren sind diejenigen, die sich mit Standard-numerische Werte (int/float); Sie sind vordefiniert in der Sprache und können nicht geändert werden.
Art "Umwandlung" erfolgt in der Regel durch Konstruktoren/Fabriken. Sie können dann überlastung standard Methoden wie
__add__
zu machen, mehr arbeiten, wie andere Klassen.Ist es das, was Sie brauchen?
Sorry für das kommen zu der party 8.5 Jahre zu spät.
Sie stammen aus einer unveränderlichen (ie. int). Sie kann nicht definieren
__init__
weil die unveränderlich ist bereits erstellt und kann nicht geändert werden (per definition). Dies ist, wo__new__
kommt in handliches.Nun, um Ihre Frage zu beantworten über das conversion-Betreiber. Sie können auch definieren
__int__
,__long__
,__float__
und natürlich__str__
. Zu convert oder cast zu einem beliebigen Objekt, werden Sie wahrscheinlich ändern müssen, das andere Objekt zu bekommen, was Sie wollen. Sie können die__new__
Methode des anderen Objektes. Oder wenn das andere Objekt bereits erstellt ist, versuchen Sie es mit__call__
.