在Python

时间:2017-10-23 09:08:49

标签: python class overloading add operator-keyword

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

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

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

object = A()
print(object + 1)

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

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

我应该在添加类方法中使用* args吗?

4 个答案:

答案 0 :(得分:6)

不,你不能使用多个参数。 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)>

答案 1 :(得分:3)

您希望返回值本身就是一个对象,它也支持添加操作,例如:

{{1}}

输出:

  

3

答案 2 :(得分:1)

即使使用多个值也能完美运行,因为每次添加只会添加两个值(当您多个值时,请参阅多个+符号):

class A:
    def __init__(self, value):
        self.a = value
    def __add__(self, another_value):
        return self.a + another_value


a = A(1)
print(a+1+1)

答案 3 :(得分:1)

您总是可以这样做:

jms_serializer:
    enable_short_alias: false