gpt4 book ai didi

python - 不能在 python 类中使用 iadd

转载 作者:行者123 更新时间:2023-11-28 21:23:28 26 4
gpt4 key购买 nike

我试图理解为什么我不能在 self 对象的类中使用 iadd (+=)。

例如,如果我定义一个带有 iadd 的类和一个使用 iadd (addA) 的函数:

class A(object):
def __init__(self, n):
self.n = n
def __iadd__(self, other):
return A(self.n+other.n)
def addA(self, other):
self+=other

a1 = A(9)
a2 = A(8)

如果我使用 addA 函数,a1 似乎不会受到影响:

a1.addA(a2)
print a1.n
>>> 9

但是如果我正常使用 iadd,它工作正常:

a1+=a2
print a1.n
>>> 17

谁能告诉我如何在类定义中使用 iadd。

(希望这不相关,但我问这个是因为我正在尝试为 maya.OpenMaya.MMatrix 对象制作一个包装器 - 我想添加一个函数来应用任意转换。我需要在我的类定义中使用 iadd 函数,因为我无法直接访问存储在父类中的数据,但我可以使用 iadd 对其进行操作。)

最佳答案

__iadd__ 正在返回 A 的新实例,而不是修改原始实例。试试看:

a1.addA(a2)
print a1.n
print a1.__iadd__(a2).n

使用 A 的这个定义来获得您想要的行为:

class A(object):
def __init__(self, n):
self.n = n
def __iadd__(self, other):
self.n += other.n
return self
def addA(self, other):
self+=other

关于python - 不能在 python 类中使用 iadd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17534131/

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