在Python中使用带有多个参数的__add__运算符


问题内容

我试图添加一个带有数字的类对象,但是我对如何添加带有两个数字的类对象感到困惑。例如,这是我假设的 添加 类方法:

class A:
    def __add__(self, b):
        return something

我到目前为止知道如何添加:

object = A()
print(object + 1)

但是,如果我想这样添加它怎么办?

object = A()
print(object + 1 + 2)

我应该使用 args作为 添加* 类方法吗?


问题答案:

不,您不能使用多个参数。Python分别执行每个+运算符,这两个+运算符是不同的表达式。

例如,object + 1 + 2确实是(object + 1) + 2。如果(object + 1)产生的对象具有__add__方法,则Python将为第二个运算符调用该方法。

例如,您可以返回A此处的另一个实例:

>>> class A:
...     def __init__(self, val):
...         self.val = val
...     def __repr__(self):
...         return f'<A({self.val})>'
...     def __add__(self, other):
...         print(f'Summing {self} + {other}')
...         return A(self.val + other)
...
>>> A(42) + 10
Summing A(42) + 10
<A(52)>
>>> A(42) + 10 + 100
Summing A(42) + 10
Summing A(52) + 100
<A(152)>