2017-05-11 2 views
0

Ich habe eine Klasse für Intervalle mit diesen Operationen unten erstellt. I ist ein definiertes Intervall. Wie funktioniert es, wenn ich die Operation I+2 und I*2 mache, aber nicht umgekehrt (2+I und 2*I)? Irgendwelche Ideen? (Die Zeilen erhalten nicht den richtigen Block, wenn ich den Code hier hineinkopiere).Multiplizieren oder fügen Sie ein Intervall mit einer Konstante

def __add__(self,other): 
    s1, f1 = self.s, self.f 
    n = other 
    if isinstance(other, Interval): 
     s2, f2 = other.s, other.f 
     return Interval(s1 + s2, f1+f2) 

def __mul__(self, other): 
    s1, f1 = self.s, self.f   
    if isinstance(other, Interval): 
     s2, f2= other.s, other.f 
     return Interval(min(s1*s2,s1*f2,f1*s2,f1*f2), 
         max(s1*s2,s1*f2,f1*s2,f1*f2)) 

def __repr__(self): 
    return "[{},{}]".format(self.a,self.b)  

Vielen Dank im Voraus!

Antwort

1

Sie müssen Implementierungen für __radd__ und __rmul__ hinzufügen, um den Fall zu behandeln, wenn der linke Operand die Operation nicht implementiert und die Operation an den Operanden auf der rechten Seite delegiert wird.

Zusätzlich könnten Sie RückkehrNotImplemented für Fälle, in denen die other Instanz keine passende Instanz ist (so dass sie auch mit ihrer eigenen __r(op)__ Methode, um die Operation zu versuchen, erhalten); Im Moment gibst du nichts zurück:

def __mul__(self, other): 
    ... 
    if isinstance(other, Interval): 
     s2, f2= other.s, other.f 
     return Interval(...) 
    return NotImplemented 

def __rmul__(self, other): 
    return self.__mul__(other) 
Verwandte Themen