3 Переопределение методов в миксинах

Mixins - это своего рода класс, который используется для «добавления» дополнительных свойств и методов в класс. Это обычно хорошо, потому что много раз классы mixin не переопределяют методы друг друга или базового класса. Но если вы переопределите методы или свойства в своих миксинах, это может привести к неожиданным результатам, потому что в Python иерархия классов определяется справа налево.

Например, возьмите следующие классы

 class Mixin1(object):
    def test(self):
        print "Mixin1"

class Mixin2(object):
    def test(self):
        print "Mixin2"

class BaseClass(object):
    def test(self):
        print "Base"

class MyClass(BaseClass, Mixin1, Mixin2):
    pass

 

В этом случае класс Mixin2 является базовым классом, расширенным с помощью Mixin1 и, наконец, с помощью BaseClass. Таким образом, если мы выполним следующий фрагмент кода:

 >>> x = MyClass()
>>> x.test()
Base

 

Мы видим возвращаемый результат из базового класса. Это может привести к непредвиденным ошибкам в логике вашего кода и должно учитываться и учитываться