有没有办法可以将argseparse模块转换成某种类型的对象?

时间:2017-07-16 20:11:51

标签: python python-3.x

我制作了一个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'

3 个答案:

答案 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)

有几种解决方案:

  1. 使PackageModule对象接受参数,并解压缩args对象PackageModule(**vars(args))
  2. 只需制作一个轻量级的名字小说
  3. 制作一个轻量级的课程
  4. 将args作为dict params=vars(args)传递,并替换正常的dict

答案 2 :(得分:0)

您可以提供argparse.parse_args()的列表,该列表不需要来自命令行:

args_list = ['-n', '10', 'hello']
args = parser.parse_args(args_list)

然后你应该像以前一样运行你的其余脚本。