Überladen des Operators in Python mit dem Objekt auf der rechten Seite des Operators

8

Ich habe kürzlich über das Überladen von Operatoren in Python erfahren, und ich würde gerne wissen, ob das Folgende möglich ist.

Betrachten Sie die folgende hypothetische / konstruierte Klasse.

%Vor%

Ich weiß, dass die Art, die oben geschrieben wurde, ich solche Dinge tun kann

%Vor%

und diese funktionieren wie erwartet. Ich weiß auch, dass die Art, wie es momentan geschrieben ist, nicht möglich ist.

%Vor%

Gibt es das überhaupt? Ich weiß, dass dieses Beispiel erfunden ist, aber ich habe eine Anwendung, in der es sehr nützlich wäre, wenn ich Operatorüberladung machte, kann die Klasse, für die ich den Operator definiere, auf der rechten Seite des Operators erscheinen. Ist das in Python möglich?

    
martega 07.05.2012, 23:40
quelle

2 Antworten

9

Ja. Zum Beispiel gibt es __radd__ . Auch gibt es keine für __le__() , __ge__() usw., sondern als Joel Cornett beobachtet zu Recht, wenn Sie nur __lt__ definieren, ruft a > b die Funktion __lt__ von b auf, was eine Umgehungslösung darstellt.

%Vor%

Beachten Sie, dass es zumindest in einigen Fällen sinnvoll ist, Folgendes zu tun:

%Vor%     
senderle 07.05.2012, 23:46
quelle
1

Sie müssen die Methode __radd__ überladen (rechte Seite). Ihre Funktion sollte so aussehen wie Ihre __add__ -Methode, z. B .:

%Vor%     
Marius 07.05.2012 23:50
quelle

Tags und Links