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

新手上路,请多包涵

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

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

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

 a = A()
print(a + 1)

但是,如果我想这样添加呢?

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

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

原文由 smith1453 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 672
2 个回答

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

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 class A:
    def __init__(self, value=0):
        self.value = value

    def __add__(self, b):
        return A(self.value + b)

    def __str__(self):
        return str(self.value)

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

输出:

3个

原文由 de1 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题