1
多重継承の例が見つかりましたが、動作の仕方が分かりません。PythonのMROが期待どおりに動作しない
class Printable:
"""A mixin class for creating a __str__ method that prints
a sequence object. Assumes that the type difines __getitem__."""
def lef_bracket(self):
return type(self).__name__ + "["
def right_bracket(self):
return "]"
def __str__(self):
result = self.lef_bracket()
for i in range(len(self)-1):
result += str(self[i]) + ", "
if len(self) > 0:
result += str(self[-1])
return result + self.right_bracket()
このスクリプトはprintable.pyに保存されているので、クラスPrintable
がこのように使用されます。
>>> from printable import *
>>> class MySeq(list, Printable):
... pass
...
>>> my_seq = MySeq([1,2,3])
>>> print(my_seq)
MySeq[1, 2, 3]
私の質問は、なぜ__str__
方法が代わりにPrintable
クラスから継承されていることですlist
クラスであり、メソッド解決オーダーMySeq
は、
>>> MySeq.__mro__
(<class '__main__.MySeq'>, <class 'list'>, <class 'printable.Printable'>, <class 'object'>)
です。
文書番号Printable
に「mixin」という単語があります。この場合、なぜそれをmixinクラスと呼びますか?