Python Glossary English

все 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Сообщить о неточности