Python—属于同一类的变量之间的乘法

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

如何将类变量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)
    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你是说我的报告吗?我会试着看看这个