+ =和__iadd__之间的差异

时间:2017-12-25 18:51:00

标签: python python-3.x

我真的不明白为什么行为不一样。

我已阅读https://stackoverflow.com/a/9172325/6581137但我不明白为什么 iadd 和+ =会产生不同的字节码。

使用Python 3.6

class flist:

    def __init__(self):
            self.a = 1

    def __iadd__(self, nb):
            self.a = self.a + nb

    def __repr__(self):
            return str(self.a)

t = (flist(), flist(), flist())
print(t)
try:
    t[1].__iadd__(2)
    #t[1] += 2
except:
    print("exception")
print(t)

输出:t [1]递增2,正常。

(1, 1, 1)
(1, 3, 1)

但是,

class flist:

    def __init__(self):
            self.a = 1

    def __iadd__(self, nb):
            self.a = self.a + nb

    def __repr__(self):
            return str(self.a)

t = (flist(), flist(), flist())
print(t)
try:
    #t[1].__iadd__(2)
    t[1] += 2
except:
    print("exception")
print(t)

输出:t [1]加2,但会引发异常吗?

(1, 1, 1)
exception
(1, 3, 1)

由于

0 个答案:

没有答案