我是新手。我想使用运算符重载,它给出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
答案 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