Python 有没有办法将argseparse模块转换为某种类型的对象?
我制作了一个python runner程序和包,如下所示: runner程序从命令行接收参数,并使用argseparse对其进行解析,如:Python 有没有办法将argseparse模块转换为某种类型的对象?,python,python-3.x,Python,Python 3.x,我制作了一个python runner程序和包,如下所示: runner程序从命令行接收参数,并使用argseparse对其进行解析,如: parser = argparse.ArgumentParser() parser.add_argument(... parser.add_argument(... args = parser.parse_args() 然后它将它们发送到我的包模块中,如下所示: packageObject = PackageModule(params=args
parser = argparse.ArgumentParser()
parser.add_argument(...
parser.add_argument(...
args = parser.parse_args()
然后它将它们发送到我的包模块中,如下所示:
packageObject = PackageModule(params=args)
现在,我正在将其制作成一个不接受命令行参数的程序,但我希望继续使用同一行初始化PackageObject
我怎么能做出这样的东西
args = ()
args.arguments_1 = 'user_name'
?您可以定义一个新类来存储参数的状态:
class Args(object):
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
args = Args('user_name', 'something else')
packageObject = PackageModule(params=args)
如果您创建多个<代码> ARGs<代码>实例,那么您可以考虑在类定义中使用<代码> .yssLoSsx,因为您不会在实例上分配新的属性,也使得实例LigToStime:
class Args(object):
__slots__ = ['arg1', 'arg2']
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
有几种解决方案:
PackageModule
对象接受参数,并解压缩args对象PackageModule(**vars(args))
params=vars(args)
传递,并替换为普通dict您可以向
argparse.parse_args()
提供一个列表,该列表不需要来自命令行:
args_list = ['-n', '10', 'hello']
args = parser.parse_args(args_list)
然后您应该能够像以前一样运行脚本的其余部分。
argparse.Namespace
,它是由parse\u args
返回的对象类型,与类Namespace:pass
没有显著区别。如果使用>=Python 3.3,他们可以使用它来避免样板文件,如果在其上调用print
,则看起来更像argparse.Namespace
。