Пространство имен, argparse и использование - PullRequest
23 голосов
/ 01 ноября 2011

Это действительно несколько вопросов:

  1. Есть ли причина, по которой argparse использует пространство имен вместо словаря?

  2. Предположим, у меня естькласс с __init__(self, init_method, *args).Параметр init_method сообщает init_function, каким образом я хочу инициализировать класс, а параметр arg предоставляет все аргументы, необходимые для init.Аргументы могут быть разными для разных методов.Должен ли я использовать словарь или пространство имен?

  3. Если я использую пространство имен, как передать пространство имен __init__()?

Ответы [ 2 ]

68 голосов
/ 01 ноября 2011

Простое преобразование пространства имен в словарь можно использовать с помощью vars () :

>>> vars(args)
19 голосов
/ 01 ноября 2011
  1. Разработчики arparse, по-видимому, чувствовали, что было бы удобнее получить доступ к аргументам как

    args.arg_name
    

    вместо

    args["arg_name"]
    

    Хотя это может быть делом вкуса. Я бы с удовольствием поехал со словарем, особенно учитывая тот факт, что в стандартной библиотеке нет класса Namespace, за исключением класса argparse.

  2. Используйте словарь.

  3. Если вам действительно нужно здесь пространство имен, вы можете использовать init_function(**args.__dict__)… но я не рекомендую его.

...