For reference, mypy recommends to implement mixins through a Protocol (documentation here).
It works with mypy >= 750.
from typing import Protocol
class HasValueProtocol(Protocol):
@property
def value(self) -> int: ...
class MultiplicationMixin:
def multiply(self: HasValueProtocol, m: int) -> int:
return self.value * m
class AdditionMixin:
def add(self: HasValueProtocol, b: int) -> int:
return self.value + b
class MyClass(MultiplicationMixin, AdditionMixin):
def __init__(self, value: int) -> None:
self.value = value
The Protocol base class is provided in the typing_extensions package for Python 2.7 and 3.4-3.7.