关于python:python-属于同一类的变量之间的乘法

Python - multiplication between a variable that belong to the same class

如何设置类变量返回到其他数据类型(list或int)?

所以我有两个属于同一类的变量,我想用这个操作符,例如,将两个变量相乘,但这不能完成,因为这两个变量都有类数据类型。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
otherclass = other.x*other.y

而不是

1
otherclass = other

这意味着OtherClass是一个int,乘法就可以了。


这称为重载。您需要重写__mul__方法、__rmul__方法,或者两者都重写。__rmul__是处理不同类型的乘法的方法,而__mul__在同一类中工作。

向类中添加类似的方法:

1
2
3
4
5
6
def __mul__(self, other):
    print '__mul__'
    return result
def __rmul__(self, other):
    print '__rmul__'
    return result

我没有在其中添加任何操作,因为我不确定您打算如何进行乘法,但是对于所有数学运算符都有重载方法。