[英]Can't use iadd within a python class
我試圖理解為什么我不能在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
文檔 :
這些方法應嘗試就地執行操作( 修改self )並返回結果(可以是,但不一定是self)
In [1]: class A(object):
...: def __init__(self, n):
...: self.n = n
...: def __iadd__(self, other):
...: self.n = self.n + other.n
...: return self
...: def addA(self, other):
...: self += other
...:
In [2]: a1 = A(9)
In [3]: a2 = A(8)
In [4]: a1.addA(a2)
In [5]: a1.n
Out[5]: 17
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.