gpt4 book ai didi

python - 我可以更改 Python 中默认的 __add__ 方法吗?

转载 作者:行者123 更新时间:2023-12-02 19:17:42 24 4
gpt4 key购买 nike

是否可以更改默认值 __add__方法除了添加之外还可以做其他事情吗?

例如,如果目标是这一行: 5+5获取The answer is 10或其他类似 0 的内容通过改变__add__成为x-y而不是x+y

我知道我可以改变__add__在我自己的类(class)中:

class Vec():
def __init__(self,x,y):
self.x = x
self.y = y

def __repr__(self):
return f'{self.x, self.y}'

def __add__(self, other):
self.x += other.x
self.y += other.y
return Vec(self.x,self.y)


v1 = Vec(1,2)
v2 = Vec(5,3)

v1+v2
# (6, 5)

我可以以某种方式定位默认的 __add__改变其行为的方法?我直觉认为__add__在每个默认数据类型中定义以返回特定结果,但话又说回来,__add__ method 是我们在为特定类更改它时要解决的问题,因此,是否可以更改 main __add__逻辑?

类似的事情吗?

class __add__():
...

最佳答案

是的,您可以重载用户定义的类中的任何内容。

class Vec():
def __init__(self,x,y):
self.x = x
self.y = y

def __repr__(self):
return f'{self.x, self.y}'

def __add__(self, other):
self.x += other.x
self.y += other.y
return Vec(self.x,self.y)


v1 = Vec(1,2)
v2 = Vec(5,3)

print(v1+v2)

# using lambda function
Vec.__add__ = lambda self,other: Vec(self.x-other.x,self.y-other.y)
print(v1+v2)

# using "normal" function
def add(self,other):
self.x -= other.x
self.y -= other.y
return Vec(self.x,self.y)
Vec.__add__ = add
print(v1+v2)

不适用于内置类型,例如导致TypeError:无法设置内置/扩展类型“set”的属性

另请注意,您的 __add__ 实现修改了原始实例,这是我不喜欢的..(只是我的注释)

关于python - 我可以更改 Python 中默认的 __add__ 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63470164/

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