我制作了一个python跑步者程序和程序包,如下所示:
runner程序从命令行接受参数并使用argseparse来解析它们,如:
parser = argparse.ArgumentParser()
parser.add_argument(...
parser.add_argument(...
args = parser.parse_args()
然后它将它们发送到我的包模块中:
packageObject = PackageModule(params=args)
现在我将它变成一个不接受命令行参数的程序,但是我想继续使用同一行初始化PackageObject。
我怎样才能做出类似的事情,
args = ()
args.arguments_1 = 'user_name'
答案 0 :(得分:0)
您可以定义一个新类来存储参数的状态:
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
实例,则可以考虑在类定义中使用__slots__
,因为您不会在实例上分配新属性,也会使实例更加严格:
class Args(object):
__slots__ = ['arg1', 'arg2']
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
答案 1 :(得分:0)
有几种解决方案:
PackageModule
对象接受参数,并解压缩args对象PackageModule(**vars(args))
params=vars(args)
传递,并替换正常的dict 答案 2 :(得分:0)
您可以提供argparse.parse_args()
的列表,该列表不需要来自命令行:
args_list = ['-n', '10', 'hello']
args = parser.parse_args(args_list)
然后你应该像以前一样运行你的其余脚本。