命名空间、argparse与用法

23 投票
2 回答
10421 浏览
提问于 2025-04-17 05:25

这其实有几个问题:

  1. 为什么 argparse 使用命名空间而不是字典呢?

  2. 假设我有一个类,里面有 __init__(self, init_method, *args)。这个 init_method 参数告诉初始化函数我想用什么方式来初始化这个类,而 arg 参数则提供了初始化所需的所有参数。这些参数可能会因为不同的方法而不同。我应该用字典,还是用命名空间呢?

  3. 假设我使用了命名空间,那我该怎么把这个命名空间传给 __init__() 呢?

2 个回答

68

把一个命名空间转换成字典其实很简单,你可以使用vars()这个函数来做到:

>>> vars(args)
19
  1. 设计arparse的人显然觉得用这种方式来获取参数会更方便:

    args.arg_name
    

    而不是用这种方式:

    args["arg_name"]
    

    这可能只是个人喜好问题。我其实更喜欢用字典,特别是因为标准库里没有其他的Namespace类,除了argparse里的那个。

  2. 用字典。

  3. 如果你真的想要一个命名空间,可以用init_function(**args.__dict__)……不过我不推荐这么做。

撰写回答