все Python 3argparseпонятие
argparse.Action
действия
Базовый класс действий argparse: решает, что сделать со значением аргумента. Наследуйте его и переопределите __call__, чтобы задать своё поведение.
Синтаксис
class MyAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None): ...
Встроенные действия задаются строкой: action='store_true', 'append', 'count'; свой класс передаётся в action= самим классом, без скобок. В __call__(parser, namespace, values, option_string) значение нужно положить самому — setattr(namespace, self.dest, ...), иначе атрибут останется значением по умолчанию. Действие вызывается только когда аргумент встретился в командной строке: default через __call__ не проходит. И ловушка 'append': default=['a'] не заменяется, а дополняется.
Примеры
import argparse
class Upper(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, values.upper())
parser = argparse.ArgumentParser(prog='app')
parser.add_argument('--name', action=Upper, default='anon')
print(parser.parse_args(['--name', 'bob'])) # → Namespace(name='BOB')
print(parser.parse_args([])) # → Namespace(name='anon') — default не проходит через __call__
import argparse
parser = argparse.ArgumentParser(prog='app')
parser.add_argument('--file', action='append', default=['a'])
print(parser.parse_args(['--file', 'b'])) # → Namespace(file=['a', 'b'])
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности