from typing_extensions import Protocol
class SupportsRead(Protocol):
def read(self) -> str:
...
class MyReader: # look ma, no inheritance
def read(self) -> str:
return 'hello world'
def test(reader: SupportsRead) -> None:
pass
test(open('/dev/null'))
test(MyReader())
test(test) # fails
В частном случае вообще может подойти typing.TextIO.
И да, я применяю mypy в боевом проекте. Польза от наличия аннотаций типов как документации для читателя/мейнтейнера кода настаёт при размере проекта больше 150 SLOC. А польза от mypy — примерно с той точки, когда проект естественным образом разделяется на несколько файлов.
Re: Down with static typing
В общем виде это называется «протокол»:
В частном случае вообще может подойти
typing.TextIO
.И да, я применяю mypy в боевом проекте. Польза от наличия аннотаций типов как документации для читателя/мейнтейнера кода настаёт при размере проекта больше 150 SLOC. А польза от mypy — примерно с той точки, когда проект естественным образом разделяется на несколько файлов.