命名空间、argparse与用法
这其实有几个问题:
为什么 argparse 使用命名空间而不是字典呢?
假设我有一个类,里面有
__init__(self, init_method, *args)
。这个init_method
参数告诉初始化函数我想用什么方式来初始化这个类,而arg
参数则提供了初始化所需的所有参数。这些参数可能会因为不同的方法而不同。我应该用字典,还是用命名空间呢?假设我使用了命名空间,那我该怎么把这个命名空间传给
__init__()
呢?
2 个回答
68
把一个命名空间转换成字典其实很简单,你可以使用vars()这个函数来做到:
>>> vars(args)
19
设计
arparse
的人显然觉得用这种方式来获取参数会更方便:args.arg_name
而不是用这种方式:
args["arg_name"]
这可能只是个人喜好问题。我其实更喜欢用字典,特别是因为标准库里没有其他的
Namespace
类,除了argparse
里的那个。用字典。
如果你真的想要一个命名空间,可以用
init_function(**args.__dict__)
……不过我不推荐这么做。