Код: Выделить всё
class MultiplicatorMixin:
def multiply(self, m: int) -> int:
return self.value * m
class AdditionMixin:
def add(self, b: int) -> int:
return self.value + b
class MyClass(MultiplicatorMixin, AdditionMixin):
def __init__(self, value: int) -> None:
self.value = value
instance = MyClass(10)
print(instance.add(2))
print(instance.multiply(2))
Код: Выделить всё
12
20
Но запуск mypy на нем приводит к следующим ошибкам:< /p>
Код: Выделить всё
example.py:4: error: "MultiplicatorMixin" has no attribute "value"
example.py:10: error: "AdditionMixin" has no attribute "value"
Для контекста это шаблон, который использовался в существующем приложении, и я сейчас добавляю подсказки типов. И в этом случае ошибки ложноположительные. Я подумываю о том, чтобы переписать эту часть с использованием примесей, поскольку мне это не особенно нравится, и то же самое, вероятно, можно было бы сделать с реорганизацией иерархии классов.
Но я бы все равно сделал это хотелось бы знать, как можно правильно намекнуть на что-то подобное.
Подробнее здесь: https://stackoverflow.com/questions/519 ... in-classes