我想输入两个数字相加,但是它应该使用运算符重载返回这两个数字的乘积

时间:2019-01-29 05:46:15

标签: python python-3.x operator-overloading

我是新手。我想使用运算符重载,它给出3 + 4,但是返回3 * 4的答案

我制作了一个类,并传递了两个函数add和mul

class A: 
    def __init__(self, a,b): 
        self.a = a 
        self.b = b

    # adding two objects  
    def __add__(self, other): 
        return self.a + other.a , self.b + other.b
    # multiply two objects
    def __mul__(self, other):
        return self.a * other.a , self.b +other.b

ob1 = A(1) 
ob2 = A(2) 
ob3 = ob1+ob2
ob4 = ob1*ob2
print(ob3)
print(ob4)

预期:输入3和4,应显示3 + 4,但返回3 * 4

1 个答案:

答案 0 :(得分:0)

在您的__mul____add__方法中,您需要返回A的实例,而不仅仅是返回一些值(除非您在进行就地操作)。似乎您只想将2个数字加在一起,所以也许您应该尝试仅使用1个参数__init__

class A:
    def __init__(self, a):
        self.a = a

    def __add__(self, other):
        return A(self.a * other.a)

现在,当您这样做时:

A(3) + A(2)

您将返回2*3,因为__add__方法将返回A的新实例,该实例的.a属性是给定两个值的乘积,而不是总和。

下一步,您还应该考虑类型检查或错误处理。如果我键入该怎么办:

A(2) + 10   # not A(10)

会引发错误吗?这取决于你。如果从函数返回NotImplemented,则引发错误的最简单方法。此方法还允许在具有.a属性的任何对象都可以工作的地方进行多态(只要它可以被乘法)。

...
def __add__(self, other):
    try:
        return A(self.a * other.a)
    except Exception:
        return NotImplemented