2017-09-12 35 views
-1

如何設置類變量返回其他數據類型(list或int)?Python - 屬於同一類的變量之間的乘法

所以我有兩個屬於同一個類的變量,我想用這個運算符例如乘以兩個變量,但是不能這樣做,因爲它們都具有類數據類型。

例如:

class Multip: 
    def __init__(self,x,y): 
     self.x = x 
     self.y = y 
    def __repr__(self): 
     return "{} x {}".format(self.x, self.y) 
    def __str__(self): 
     return "{}".format(self.x*self.y) 
    def __mul__(self, other): 
     thisclass = self.x*self.y 
     otherclass = other 
     return thisclass * otherclass 
a = Multip(5,6) 
b = Multip(7,5) 
c = a*b 
print(c) 

這將返回一個錯誤:

TypeError Traceback (most recent call last) in() 14 a = Multip(5,6) 15 b = Multip(7,5) ---> 16 c = a*b 17 print(c)

in mul(self, other) 10 thisclass = self.x*self.y 11 otherclass = other ---> 12 return thisclass * otherclass 13 14 a = Multip(5,6)

TypeError: unsupported operand type(s) for *: 'int' and 'Multip'

+1

因爲你還沒有實現'Multip .__ mul __(self,other)'。 –

+0

另外你的表現有點笨拙;你應該區分值和操作。也許看看SymPy的一些想法? –

+0

@HughBothwell對不起,忘了寫下來。所以我實際上有mul函數,但是因爲其他變量的參數是以類型的形式出現的,所以無法完成。任何想法如何解決? – garjted

回答

1

爲了得到這個工作,這樣做:

otherclass = other.x*other.y 

,而不是

otherclass = other 

這將意味着其他類是一個int並且乘法將起作用。

0

這被稱爲超載。您需要重寫__mul__方法,__rmul__方法或兩者。 __rmul__是你如何處理不同類型的乘法,而__mul__如果兩個都是同一類的話。

添加方法,這樣對你的類:

def __mul__(self, other): 
    print '__mul__' 
    return result 
def __rmul__(self, other): 
    print '__rmul__' 
    return result 

我沒有這些添加的任何操作,因爲我不知道您打算如何做乘法,但也有所有的數學重載方法運營商。