假设我具有以下加载程序方法:
#################################
# 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个参数的类。
注意:我无法控制要实例化的类。一世 无法更改他们的论点。
答案 0 :(得分:1)
您可以像这样动态确定所需的参数:
class MyClass:
def __init__(self, param1, param2):
# do stuff
args = MyClass.__init__.__code__.co_varnames
print(args)
> ('self', 'param1', 'param2')
从那里,您只能从参数列表中提取所需的参数。使用unpack运算符(*表示args,**表示kwargs)
params = {'param1': 'foo', 'param2': 'bar', 'param3': 'baz'}
params_to_pass = {argname:params[argname] for argname in args[1:]} # ignore 'self'
obj = MyClass(**params_to_pass)
答案 1 :(得分:0)
我认为这会起作用:
index.php
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
然后我会这样称呼它:
#################################
# 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])