Мой подход состоит в том, чтобы определить NewType
:
PositiveInt = NewType('PositiveInt', int)
и, возможно, вспомогательный тип:
def assert_positive(n: int) -> PositiveInt:
assert n > 0
return PositiveInt(n)
Это не железно (потому что вы все еще можете сказать PositiveInt(-5)
или что-то в этом роде), но большая часть набора текста может быть переопределена путем приведения; простое применение этого явного объявления в значительной степени предотвращает большинство ошибок.