我真的不明白为什么行为不一样。
我已阅读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)
由于