Как создать пространство имен Python (значение argparse.parse_args)?
Чтобы интерактивно протестировать мой python script, я хотел бы создать объект Namespace
, аналогичный тому, который будет возвращен argparse.parse_args()
.
Очевидным способом,
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.parse_args()
Namespace()
>>> parser.parse_args("-a")
usage: [-h]
: error: unrecognized arguments: - a
Process Python exited abnormally with code 2
может привести к тому, что реплика Python будет выходить (как указано выше) на глупую ошибку.
Итак, , что является самым простым способом создания пространства имен Python с заданным набором атрибутов?
Например, я могу создать dict
на лету (dict([("a",1),("b","c")])
), но я не могу использовать его как Namespace
:
AttributeError: 'dict' object has no attribute 'a'
Ответы
Ответ 1
Вы можете создать простой класс:
class Namespace:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
и он будет работать точно так же, как класс argparse
Namespace
, когда дело доходит до атрибутов:
>>> args = Namespace(a=1, b='c')
>>> args.a
1
>>> args.b
'c'
В качестве альтернативы просто импортируйте класс; он доступен из модуля argparse
:
from argparse import Namespace
args = Namespace(a=1, b='c')
Ответ 2
документация argparse показывают различные примеры того, что вы пытаетесь сделать:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-a")
parser.parse_args(['-a 12'])
>>> Namespace(a=' 12')