Лучший вариант предоставления подсказок типа для аргументов argparse, чем собственное пространство имен. ⇐ Python
Лучший вариант предоставления подсказок типа для аргументов argparse, чем собственное пространство имен.
Я пытаюсь использовать mypy для проверки типа моей программы. Программа использует argparse для анализа аргументов командной строки. Я хочу добавить подсказки типов для аргументов командной строки.
импортировать argparse импортировать типизацию # определить типы примеров и функцию, которая их использует Секунды = typing.NewType("Секунды", float) Минуты = typing.NewType("Минуты", float) def sec_to_min(s: Секунды) -> Минуты: возврат Минуты(с / 60) # указываем аргументы и анализируем их синтаксический анализатор = argparse.ArgumentParser() parser.add_argument("-t", "--time", default=1., type=float, help="время в секундах") args = parser.parse_args() пытаться: # mypy показывает тип Любой показ_типа (args.time) кроме NameError: проходить # (1) проходит проверку типа секунды: Секунды = args.time # (2) проходит проверку типа sec_to_min(args.time) Я бы хотел, чтобы mypy распознавал args.time как Секунды. Текущий код должен распознавать args.time как число с плавающей запятой и жаловаться, поскольку передача числа с плавающей запятой в sec_to_min также вызывает жалобы.
Я попытался изменить аргумент type add_argument на type=lambda x: Seconds(float(x)). Это не имело никакого эффекта, mypy по-прежнему идентифицировал args.time как any.
Как упоминалось здесь, я также попытался предоставить собственное пространство имен. Это изменило выявленный тип args.time на Seconds. Я хотел бы избежать этого, поскольку мне пришлось бы дублировать имя для каждого аргумента, а значение по умолчанию из add_argument переопределяется пользовательским пространством имен.
класс TypedNameSpace(argparse.Namespace): def __init__(self, *args, **kwargs): self.time: Секунды = Секунды(0.) super(TypedNameSpace, self).__init__(*args, **kwargs)
Я пытаюсь использовать mypy для проверки типа моей программы. Программа использует argparse для анализа аргументов командной строки. Я хочу добавить подсказки типов для аргументов командной строки.
импортировать argparse импортировать типизацию # определить типы примеров и функцию, которая их использует Секунды = typing.NewType("Секунды", float) Минуты = typing.NewType("Минуты", float) def sec_to_min(s: Секунды) -> Минуты: возврат Минуты(с / 60) # указываем аргументы и анализируем их синтаксический анализатор = argparse.ArgumentParser() parser.add_argument("-t", "--time", default=1., type=float, help="время в секундах") args = parser.parse_args() пытаться: # mypy показывает тип Любой показ_типа (args.time) кроме NameError: проходить # (1) проходит проверку типа секунды: Секунды = args.time # (2) проходит проверку типа sec_to_min(args.time) Я бы хотел, чтобы mypy распознавал args.time как Секунды. Текущий код должен распознавать args.time как число с плавающей запятой и жаловаться, поскольку передача числа с плавающей запятой в sec_to_min также вызывает жалобы.
Я попытался изменить аргумент type add_argument на type=lambda x: Seconds(float(x)). Это не имело никакого эффекта, mypy по-прежнему идентифицировал args.time как any.
Как упоминалось здесь, я также попытался предоставить собственное пространство имен. Это изменило выявленный тип args.time на Seconds. Я хотел бы избежать этого, поскольку мне пришлось бы дублировать имя для каждого аргумента, а значение по умолчанию из add_argument переопределяется пользовательским пространством имен.
класс TypedNameSpace(argparse.Namespace): def __init__(self, *args, **kwargs): self.time: Секунды = Секунды(0.) super(TypedNameSpace, self).__init__(*args, **kwargs)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Когда использовать явное глобальное пространство имен или явное пространство имен std
Anonymous » » в форуме C++ - 0 Ответы
- 38 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Пространство имен не указано. Укажите пространство имен в файле build.gradle модуля.
Anonymous » » в форуме Android - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Пространство имен не указано. Укажите пространство имен в файле build.gradle модуля.
Anonymous » » в форуме Android - 0 Ответы
- 45 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Пространство имен не указано. Укажите пространство имен в файле build.gradle модуля.
Anonymous » » в форуме Android - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Пространство имен не указано. Укажите пространство имен в файле сборки модуля:
Anonymous » » в форуме Android - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-