Я выполняю рефакторинг некоторого кода, который не очень многократно используется и содержит довольно много повторяющегося кода.В коде есть два класса A и B, которые расширяют абстрактный класс I. Но есть подклассы A и B для поддержки концепций X и Y, поэтому результатом являются конкретные классы AX, AY, BX, BY с понятиями X и Y, которые копируются и вставляются.в каждый.
Итак, я знаю, что могу использовать композицию здесь для делегирования поддержки функций X и Y, но для этого также требуется код, который создает эти объекты и т. д. Именно поэтому я начал читать о миксинах, поэтому мне интересно,мой код - хорошее решение
class I(ABC):
@abstractmethod
def doSomething():
pass
class ICommon(ABC):
@abstractmethod
def doSomethingCommon():
pass
class A(I, ICommon):
# the interface(s) illustrates what mixins are supported
# class B could be similar, but not necessarily with the same interfaces
def doSomething():
self.doSomethingCommon()
...
class XCommonMixin(object):
# feature X shared possibly in A and B
# I have also split features X into much smaller concise parts,
# so the could be a few of these mixins to implement the different
# features of X
def doSomethingCommon():
return 42
class AX(XCommonMixin, A):
pass
# init can be defined to construct A and bases if any as appropriate