Я хотел бы представить шаблон кода, который я часто вижу в своем коде на Python, здесь, на работе, и я не удовлетворен этим, и мне бы хотелось получить лучшее решение.Аннотация метод и mixin в python
Вот что мы имеем сегодня:
class AbstractClass(object):
....
def method1(self,...)
raise NotImplementedError
...
class FirstImplementationMixin(object)
def method1(self,....)
...
class SecondImplementationMixin(object)
def method1(self...)
....
class InstanciatedClass1(FirstImplementationMixin, AbstractClass)
....
class InstanciatedClass2(SecondImplementationMixin, AbstractClass)
....
Вы видите трюк? Я должен добавить mixin в первую позицию в списке наследования, и мне не нравится это решение. Если мы добавим его во вторую позицию, интерпретатор будет использовать AbstractClass.method1 и таким образом повысить исключение.
В этой тривиальной ситуации возможно замену mixin промежуточным классом, но в случае сложного наследования с уже базовым классом решение может быть не очевидным.
Что для вас лучший дизайн?
Ну, вот как работает Python. Когда у вас нет черт/mixins в качестве отдельной концепции на вашем языке, вы просто смешиваете их с классами. И перечисление классов в порядке их «приоритета» - очень естественная вещь. – kirelagin