文章目錄
- 0 結果
- 1 調用方法
- 2 調用類中的方法
- 3 調用測試的代碼
0 結果
檔案目錄:
調用方法:
executeModel2("model.testModel2", [1, 2])
調用類中的方法:
executeModel("model.add", [1, 2])
優點:
- 自動引包;
- 類名和方法名通過參數傳入來調用;
1 調用方法
方法:
def executeModel2(config, input):
model, func = config.strip().split(".")
module = __import__(f"lib.{model}", fromlist=True)
if hasattr(module, func):
func = getattr(module, func)
func(input)
else:
print("模型不存在!")
調用測試:
executeModel2("model.testModel2", [1, 2])
解釋:
-
相當于__import__(f"lib.{model}", fromlist=True)
;import lib.model
-
:判斷對象是否存在某個方法;hasattr
-
:傳回對象指定屬性的值;getattr
2 調用類中的方法
方法:
def executeModel(config, input):
model, func = config.strip().split(".")
model_class_name = str.upper(model[0]) + model[1:len(model)]
module = __import__(f"lib.{model}", fromlist=[model_class_name])
import inspect
for obj_name, obj in inspect.getmembers(module):
if inspect.isclass(obj): # 執行個體化對象
print(obj_name, obj)
if obj_name == model_class_name + 'Input':
model_input = obj(*input)
elif obj_name == model_class_name:
model_class = obj("測試反射模型")
else:
pass
# 調用對象中方法
model_method = getattr(model_class, func)
model_method(model_input)
executeModel("model.add", [1, 2])
3 調用測試的代碼
class ModelInput:
def __init__(self, num1, num2):
self._num1 = num1
self._num2 = num2
@property
def num1(self):
return self._num1
@property
def num2(self):
return self._num2
class Model:
def __init__(self, model_info):
self._model_info = model_info
def add(self, input):
res = input.num1 + input.num2
print(f"{self._model_info}:{res}")
def testModel2(params=list()):
print(params)