我把代码改了一点点:
class SeqLike(object):
def __init__(self):
print('init a SeqLike')
return
def __iter__(self):
yield 1
yield 99
raise StopIteration
if __name__ == '__main__':
n = SeqLike()
a, b = n
print('a=',a)
print('b=',b)
输出是:
init a SeqLike
a= 1
b= 99
可以看出:
执行a, b = n,实际上是执行了__iter__函数。
改成a,b,c=n,就会报参数不够。
之前有一个类似问题:
class Fibs:
def __init__(self):
self.a=0
self.b=1
def __iter__(self):
return self
def __next__(self):
self.a,self.b=self.b,self.a+self.b
return self.a
f=Fibs()
it=iter(f)
i=next(it)
print(i)
归纳后的答案是:
=不是单纯的算右边,然后赋值给左边。
it = iter(f),在执行iter(f)时会去调用f的__iter__()方法,
r2.size=(3,4)在执行=这一步时,会调用r2的__setattr__()方法。