2017-02-22 7 views
0

Ich versuche, mit Operator überladen zu spielen, und ich fand mich selbst versuchen mehr als 2 Argumente. Wie würde ich dies implementieren, um eine beliebige Anzahl von Argumenten zu akzeptieren.Python, wie man mehrere Argumente bei add magic Methode akzeptiert

class Dividend: 

    def __init__(self, amount): 
     self.amount = amount 

    def __add__(self, other_investment): 
     return self.amount + other_investment.amount 

investmentA = Dividend(150) 
investmentB = Dividend(50) 
investmentC = Dividend(25) 

print(investmentA + investmentB) #200 
print(investmentA + investmentB + investmentC) #error 
+2

Sie würden eine neue Instanz von 'Dividend' von' __add__' zurückkehren, dies zu tun, in der Regel. – Ryan

+1

Afaik können Sie es nicht so machen: 'investitionA + investitionB + investitionC' wird interpretiert als' (investitionA + investitionB) + investitionC' ... –

Antwort

3

Das Problem ist nicht, dass Ihre __add__ Methode nicht mehrere Argumente akzeptiert, das Problem ist, dass es keinen Dividend zurückgibt. Der Additionsoperator ist immer ein binärer Operator, aber nach der ersten Addition versuchen Sie, einen numerischen Typ zu einem Dividend hinzuzufügen, anstatt zwei Dividenden hinzuzufügen. Sie sollten Ihre __add__ Methode den entsprechenden Typen zurückgeben, zum Beispiel haben:

def __add__(self, other_investment): 
    return Dividend(self.amount + other_investment.amount) 
Verwandte Themen