Python 如何动态实例化一个构造函数采用多个参数的类?

Python 如何动态实例化一个构造函数采用多个参数的类?,python,dynamic,Python,Dynamic,假设我有以下加载程序方法: ################################# # Load a class ################################# def __load_class(self, module_name, class_name, params): try: loaded_class = getattr(importlib.import_module(module_n

假设我有以下加载程序方法:

    #################################
    # Load a class
    #################################
    def __load_class(self, module_name, class_name, params):
        try:
            loaded_class = getattr(importlib.import_module(module_name), class_name)
            obj = loaded_class(params)
            return obj
        except Exception as ex:
            self.logger.error("FAILED to load class: {0}.{1}\n{2}".format(module_name, class_name, traceback.format_exc()))
如何将实例化类所需的
params
传递到此方法?我有一些类采用1个参数,其他类采用2个参数


注意:我无法控制要实例化的类。我 不能改变他们的论点


您可以动态确定所需的参数,如下所示:

class MyClass:
    def __init__(self, param1, param2):
        # do stuff

args = MyClass.__init__.__code__.co_varnames
print(args)
> ('self', 'param1', 'param2')
从那里,您只能从参数列表中提取所需的参数。使用解包运算符(*用于args,**用于kwargs)


我认为这会奏效:

    #################################
    # Load a class
    #################################
    def __load_class(self, module_name, class_name, params):
        try:
            loaded_class = getattr(importlib.import_module(module_name), class_name)
            obj = loaded_class(*params)
            return obj
        except Exception as ex:
            self.logger.error("FAILED to load class: {0}.{1}\n{2}".format(module_name, class_name, traceback.format_exc()))
然后我会这样称呼它:

self.__load_class(module_name, class_name, [arg1])


如果您将类构造函数设置为接受命名参数,则可以将参数更改为
**kwargs
,然后执行
加载的_class(**kwargs)
。根据客户端代码,您可以使用*args和/或**kwargs。我无法控制要实例化的类。我不能改变他们的论点。我认为任何指向副本的链接都没有帮助。他们说我不能改变我的类的参数。假设我不能控制我试图实例化的类。我不能改变它们。我只是在写一个动态的实例,它不如@C_Z____________________________________!
self.__load_class(module_name, class_name, [arg1])
self.__load_class(module_name, class_name, [arg1, arg2])