December 23, 2019

Миксины

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

Например, создадим класс Machine:

Теперь вопрос, как подключить функционал радио к машине, именно к Car, таким образом, чтобы не добавлять его к самолету? Для этого можно использовать миксины. И вот как мы можем его сделать:

Вот таким образом мы примешали радио именно в Car и теперь може�� наслаждаться им в машине:

Как правило миксины не содержат атрибутов и методов с теми же наименованиями которые содержатся в иерархии классов к которым они примешиваются. И сами по себе миксины, не смотря на то, что это множественное наследование не подразумевает, что мы вообще строим именно Deadly Diamond of Death (ромб), про который я рассказывал в прошлом посте. Поэтому, как правило мы пользуемся множественным наследованием именно используя миксины, но миксины мы можем примешивать и к какой то иерархии классов, просто мы не выстариваем иерархии классов таким образом, чтобы возникали именно ромбы. Таким образом Python разрешает множественные наследования, но относиться следует к множественному наследованию с осторожностью, использовать классическое наследование можно, но ни в коем случае не создавать ромбы, ну и конечно же в любом количестве можно примешивать миксины, которые совершенно ничем не мешают ни наследникам, ни их базовым классам.