gpt4 book ai didi

Python 运算符重载多个操作数

转载 作者:行者123 更新时间:2023-12-01 03:41:44 31 4
gpt4 key购买 nike

我知道我可以通过以下方式在 python 中进行简单的运算符重载。

假设重载“+”运算符。

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

def __add__(self,other):
return self.value + other.value

a1 = A(10)
a2 = A(20)
print a1 + a2

但是当我尝试执行以下操作时它失败了,

a1 = A(10)
a2 = A(20)
a3 = A(30)
print a1 + a2 + a3

因为__add__只接受2个参数。实现 n 个操作数的运算符重载的最佳解决方案是什么。

最佳答案

这是失败的,因为 a1 + a2 返回一个 int 实例,并且调用了它的 __add__ ,它不支持自定义类的添加A;您可以在 __add__ 中返回一个 A 实例来消除此特定操作的异常:

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

def __add__(self,other):
return type(self)(self.value + other.value)

现在将它们添加在一起的行为符合预期:

>>> a1 = A(10)
>>> a2 = A(20)
>>> a3 = A(30)
>>> print(a1 + a2 + a3)
<__main__.A object at 0x7f2acd7d25c0>
>>> print((a1 + a2 + a3).value)
60

这个类当然也遇到了与其他操作相同的问题;您需要实现其他 dunders 来返回您的类的实例,否则您将在其他操作中遇到相同的结果。

如果您希望在打印这些对象时显示良好的结果,您还应该实现__str__以在调用时返回值:

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

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

def __str__(self):
return "{}".format(self.value)

现在打印已达到您需要的效果:

>>> print(a1 + a2 + a3)
60

关于Python 运算符重载多个操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39513191/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com