Python 有没有办法将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

我制作了一个python runner程序和包,如下所示:

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'

您可以定义一个新类来存储参数的状态:

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))
  • 只需制作一个轻量级的namedtuple
  • 做一个轻量级的类
  • 将args作为dict
    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