2017-02-22 7 views
0

私は演算子のオーバーロードを回避しようとしていますが、2つ以上の引数を試しています。任意の数の引数を受け入れるためにこれをどのように実装しますか?Pythonのマジックメソッドの追加で複数の引数を受け入れる方法

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

あなたは、通常、これを行うには、 '__add__'から' Dividend'の新しいインスタンスを返します。 – Ryan

+1

Afaikあなたはそうすることはできません: 'investmentA + investmentB + investmentC'は'(investmentA + investmentB)+ investmentC'と解釈されます... –

答えて

3

問題は、あなたの__add__メソッドが複数の引数を受け付けないということはありませんが、問題はそれがDividendを返さないということです。加算演算子は常にバイナリ演算子ですが、最初の加算後に2つの配当を加算するのではなくDividendに数値型を追加しようとします。あなたの__add__方法は、例えば、適切な型を返す必要があります:

def __add__(self, other_investment): 
    return Dividend(self.amount + other_investment.amount) 
関連する問題