Python argparse , add_argument, type = <some function> 而不是 int?

Python argparse , add_argument, type = <some function> rather than int?

在一个项目中,我看到 add_argument() 的以下用法:

parser = argparse.ArgumentParser()
parser.add_argument("--somearg",type=make_arg_instance,help='blahblahblah')
args = parser.parse_args()
i = args.somearg.somefunction()

其中 make_arg_instance 是定义为的函数:

def make_arg_instance():
    somearg = SomeClassName()
    return somearg

似乎参数 'somearg' 是一个 class 对象而不是 int,这就是为什么后来调用了一个方法,如 i = args.somearg.somefunction().

在我见过的大多数教程中,参数类型始终是 int 因此有人可以解释一下如何添加类型 class 或 [=18 以外的任何类型的参数=]?谢谢!

来自documentation for the type argument

By default, ArgumentParser objects read command-line arguments in as simple strings. However, quite often the command-line string should instead be interpreted as another type, like a float or int. The type keyword argument of add_argument() allows any necessary type-checking and type conversions to be performed.

[...]

type= can take any callable that takes a single string argument and returns the converted value

您可以传入 任何可调用对象,前提是它需要一个要转换的参数。 int() 是这样一个可调用的,但这并不意味着您必须使用它。如果你想要一些 other 类型或者想对允许的值应用额外的约束,你可以指定你自己的。