簡體   English   中英

不能在python類中使用iadd

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM