from abc import abstractmethod
from typing import Protocol
class SupportsRead(Protocol):
@abstractmethod
def read(self) -> str:
pass
def fun(something: SupportsRead):
print(something.read())
class Good:
def read(self) -> str:
return "foobar"
class Bad:
def read(self) -> int:
return 42
fun(Good())
fun(Bad())
foobar.py:25: error: Argument 1 to "fun" has incompatible type "Bad"; expected "SupportsRead"
foobar.py:25: note: Following member(s) of "Bad" have conflicts:
foobar.py:25: note: Expected:
foobar.py:25: note: def read(self) -> str
foobar.py:25: note: Got:
foobar.py:25: note: def read(self) -> int
Found 1 error in 1 file (checked 1 source file)
Только не забывайте, что mypy -- это не статическая типизация, а проверка type hints там, где программист счёл их нужными. Если не написать type hints, ничего не будет -- например, если убрать "-> int" в описании класса Bad, ошибка исчезнет.
> В тех проектах, где я видел использование mypy — отсутствие type hints выдавало ошибку.
Я так понимаю, что Вы не видели использование mypy.
Re: Down with static typing
Date: 2020-01-06 10:36 am (UTC)https://mypy.readthedocs.io/en/latest/protocols.html#protocol-types
Только не забывайте, что mypy -- это не статическая типизация, а проверка type hints там, где программист счёл их нужными. Если не написать type hints, ничего не будет -- например, если убрать "-> int" в описании класса Bad, ошибка исчезнет.
> В тех проектах, где я видел использование mypy — отсутствие type hints выдавало ошибку.
Я так понимаю, что Вы не видели использование mypy.