python中的重载

2024-04-18 14:27:26 发布

您现在位置:Python中文网/ 问答频道 /正文

class tri:
def __init__(self,x=0):
    self.x=x
def __str__(self):
    return '({0})'.format(self.x)
def __add__(self,one,two):
    length=self.x+one.x+two.x
    return length


>>>perp=tri(5)
>>>print(perp)
>>>base=tri(8)
>>>print(base)
>>>hyp=tri(9)
>>>print(hyp)
>>>print (perp+base+hyp)

这是给我看的:

TypeError(): __add__() missing 1 required positional argument: 'two'

有什么问题吗?我不明白


Tags: selfaddbasereturninitdefonelength
2条回答

The signature of ^{}必须是__add__(self, other),而不是__add__(self,one,two)+的左边参数是self参数,右边参数是__add__的另一个参数

在python中重载像__add__这样的魔术方法的目的是在__add__方法中定义自定义功能,而不是改变它的基本用途。__add__方法对应于+运算符,它用作两个变量之间的运算符。换句话说2 + 2基本上就是说2.__add__(2)。您将方法定义为:

def __add__(self,one,two):
    length=self.x+one.x+two.x
    return length

所以您要向magic方法添加第三个变量,因此2 + 2基本上是2.__add__(2, missing_var),这就是它告诉您缺少参数的原因。我建议将此定义改为:

def __add__(self, one):
    return self.x + one.x

如果您真的想重载您的方法,那么您的print方法将按预期工作。如果确实需要一个方法来添加三个变量,那么在类中定义另一个方法,但是重载__add__通常不是一个好的解决方案

相关问题 更多 >