必须委托给基类:
In [1]: class Base:
...: A = False
...: B = ''
...: C = ''
...:
...: def __iter__(self):
...: yield 'a', self.A
...: yield 'b', self.B
...: yield 'c', self.C
...:
In [2]: class Data(Base):
...: D = ''
...:
...: def __iter__(self):
...: yield from super().__iter__()
...: yield 'd', self.D
...:
In [3]: print(list(Data()))
[('a', False), ('b', ''), ('c', ''), ('d', '')]
In [4]: print(dict(Data()))
{'c': '', 'b': '', 'd': '', 'a': False}
Python 3允许
yield from
语法,在Python 2中使用:
class Base(object): # make sure to inherit from object for super to work
A = False
B = ''
C = ''
def __iter__(self):
yield 'a', self.A
yield 'b', self.B
yield 'c', self.C
class Data(Base):
D = ''
def __iter__(self):
for x in super(Data, self).__iter__():
yield x
yield 'd', self.D