Python—属于同一类的变量之间的乘法
如何将类变量return设置为其他数据类型(list或int) 所以我有两个属于同一类的变量,我想使用运算符,例如,对两个变量进行乘法,但是不能这样做,因为它们都有类数据类型 例如:Python—属于同一类的变量之间的乘法,python,python-3.x,class,oop,Python,Python 3.x,Class,Oop,如何将类变量return设置为其他数据类型(list或int) 所以我有两个属于同一类的变量,我想使用运算符,例如,对两个变量进行乘法,但是不能这样做,因为它们都有类数据类型 例如: class Multip: def __init__(self,x,y): self.x = x self.y = y def __repr__(self): return "{} x {}".format(self.x, self.y) de
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回溯(最近的调用
最后)在()
14 a=多(5,6)
15b=多(7,5)
--->16 c=a*b
17印刷品(c)
在mul中(自我、其他)
10 thisclass=self.x*self.y
11其他类别=其他
--->12返回此类*其他类
13
14 a=多(5,6)
TypeError:不支持*:“int”和“multi”的操作数类型
要使其正常工作,请执行以下操作:
otherclass = other.x*other.y
而不是
otherclass = other
这将意味着otherclass是一个int,乘法将起作用。这称为重载。您需要覆盖
\uuuuu mul\uuuu
方法和\uuuuu rmul\uuuu
方法,或者同时覆盖这两种方法<代码>\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
向类中添加如下方法:
def __mul__(self, other):
print '__mul__'
return result
def __rmul__(self, other):
print '__rmul__'
return result
我没有在这些中添加任何运算,因为我不确定您打算如何执行乘法,但所有数学运算符都有重载方法。因为您没有实现
multi.\uuuu mul(self,other)
。而且您的表示有点笨拙;您可能应该区分值和操作。“也许你可以看看SymPy的一些想法?”HughBothwell哦,对不起,忘了写了。实际上我有一个mul函数,但因为另一个变量的参数是类类型的,所以不能这样做。你知道怎么解决吗?@HughBothwell你是说我的报告吗?我会试着看看这个