Полагаю, вы могли бы проанализировать mro
вручную, что-то вроде:
In [8]: class Base(object):
...: def smart_word_reader(self):
...: for cls in type(self).mro():
...: for word in getattr(cls, 'words', ()):
...: print(word)
...:
...: class A(Base):
...: words = ['foo', 'bar']
...:
...: class B(A):
...: words = ['baz']
...:
In [9]: a = A()
In [10]: a.smart_word_reader()
foo
bar
In [11]: b = B()
In [12]: b.smart_word_reader()
baz
foo
bar
Или, возможно, в reversed
порядке:
In [13]: class Base(object):
...: def smart_word_reader(self):
...: for cls in reversed(type(self).mro()):
...: for word in getattr(cls, 'words', ()):
...: print(word)
...:
...: class A(Base):
...: words = ['foo', 'bar']
...:
...: class B(A):
...: words = ['baz']
...:
In [14]: a = A()
In [15]: a.smart_word_reader()
foo
bar
In [16]: b = B()
In [17]: b.smart_word_reader()
foo
bar
baz
Или более сложныйрисунок:
In [21]: class Base(object):
...: def smart_word_reader(self):
...: for cls in reversed(type(self).mro()):
...: for word in getattr(cls, 'words', ()):
...: print(word)
...:
...: class A(Base):
...: words = ['foo', 'bar']
...:
...: class B(Base):
...: words = ['baz']
...:
...: class C(A,B):
...: words = ['fizz','pop']
...:
In [22]: c = C()
In [23]: c.smart_word_reader()
baz
foo
bar
fizz
pop
In [24]: C.mro()
Out[24]: [__main__.C, __main__.A, __main__.B, __main__.Base, object]