Глядя на https://github.com/python/typeshed/blob/master/stdlib/2and3/argparse.pyi
# undocumented
class _ActionsContainer:
def add_argument(self,
...
**kwargs: Any) -> Action: ...
def add_argument_group(self, *args: Any, **kwargs: Any) -> _ArgumentGroup: ...
Я не использую pycharm
, но я озадачен, почему он будет жаловаться на add_argument
, а не на add_argument_group
.
В документации argparse не упоминается возвращенный объект Action
, но это потому, что пользователям обычно не требуется доступ к нему.Но при интерактивном тестировании это довольно очевидно:
In [93]: import argparse
In [94]: parser = argparse.ArgumentParser()
In [95]: parser.add_argument('--foo', choices=['one','two'])
Out[95]: _StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=['one', 'two'], help=None, metavar=None)
In [96]: _.choices
Out[96]: ['one', 'two']
Предыдущие ответы SO указывали, что Actions
также доступны в «скрытом» списке _actions
.Но в Python это «_» - просто неформальное соглашение;интерпретатор не обеспечивает конфиденциальность.
In [98]: parser._actions
Out[98]:
[_HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None),
_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=['one', 'two'], help=None, metavar=None)]
Отображается строковое представление объекта Action
.Это наиболее часто используемые атрибуты.
Документация для argparse
не является официальной ссылкой API;это слишком неполно для этого.Это более сложный документ с инструкциями, более сложный, чем учебное пособие, но не такой полный, как формальная спецификация.