В определенных случаях множественное наследование это зло. Добро - когда классы родители не перекрывают друг друга. Частный случай такой схемы - примиси == миксины == mixin == mix in. Концепция примисей строится на идеи четкого разделения свойств и методов для сущностей.

Например,

  • если есть летающее животное, то можно смело иметь метод fly;
  • если есть раскрашиваемый объект, то можно завести методы "покрасить", и два состояния - "раскрашен" (bool) и цвет.

Использование миксин выглядит так:

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

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

class MyClass(BaseClass, Mixin1, Mixin2):
    pass

(смотрели видео "Super - это супер"?)

В чем отличие от обычного наследования? По синтаксису - ни в чем. Отличия на уровне договоренностей и использовании - в mixin-класс помещают все необходимое и достаточное для определения сущности.

Пример:

  • есть изменяемый объект - все действия с таким объектом храним в миксине.
  • есть итерируемый объект - тоже миксин.

Комбинируем два этих элемента и получаем интерируемый изменяемый объект.

Погружаемся в множественное наследование:



Комментарии