Python напечатайте int как положительный - PullRequest
0 голосов
/ 01 мая 2020

Мне любопытно, что было бы лучшим способом указать, что тип является не просто int, но положительным int в Python.

Примеры:

# As function argument

def my_age(age: int) -> str:
    return f"You are {age} years old."


# As class property

class User:
    id: int

В обеих этих ситуациях отрицательное значение будет ошибочным. Было бы неплохо быть предупрежденным моей IDE / линтером.

Есть ли простой способ указать целое число как положительное, используя подсказки типа?

1 Ответ

1 голос
/ 01 мая 2020

Мой подход состоит в том, чтобы определить NewType:

PositiveInt = NewType('PositiveInt', int)

и, возможно, вспомогательный тип:

def assert_positive(n: int) -> PositiveInt:
    assert n > 0
    return PositiveInt(n)

Это не железно (потому что вы все еще можете сказать PositiveInt(-5) или что-то в этом роде), но большая часть набора текста может быть переопределена путем приведения; простое применение этого явного объявления в значительной степени предотвращает большинство ошибок.

...