Правильное использование mixins в питоне - PullRequest
0 голосов
/ 07 марта 2012

Предположим, что A, B и C являются классами. C наследуется от A и B, используя их в качестве миксинов.

В этот момент A может получить доступ к любым атрибутам на B и C через self.whither. B может получить доступ к любым атрибутам A и C через self.whither. И C может обращаться к любым атрибутам A и B через self.wh независимо.

Существуют ли какие-либо хорошие статьи или существует консенсус, по которому из них следует «знать» о том, как взаимодействовать с другими при использовании этого паттерна «смешения» в python? Например, должен ли C использовать функциональность только в A / B, а не наоборот? Или A / B должен использовать функциональность только на C, а не наоборот?

РЕДАКТИРОВАТЬ - это код, который я унаследовал от другого автора. Объяснение было в том, что при использовании патча mixin в python это приемлемый дизайн. Вы, ребята, подтвердили, что это не так. Как я упоминал ниже в комментарии, я бы никогда не пошел на объектно-ориентированное проектирование таким образом, и я буду рефакторинг кода. Я был открыт к возможности того, что было что-то в паттерне «миксин», которое я не понимал, поэтому возник вопрос. Также спасибо за отрицательные голоса.

1 Ответ

0 голосов
/ 07 марта 2012

Может ли A быть реализован сам по себе?Если это возможно, он не должен зависеть от C. То же самое для B на C. Как обобщение, инстанцируемый класс должен зависеть только от себя и своих суперклассов, но не подклассов.

Существуют возможные исключения из этого, гдесуперклассу может потребоваться информация о его подклассах, но это, вероятно, свидетельствует о плохой конструкции из-за (как правило, нежелательного) соединения.

...