36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
|
|
import json
|
|||
|
|
from ..AbstractFactory.AbstractFactory import *
|
|||
|
|
|
|||
|
|
|
|||
|
|
def create_class(class_name, base_class_name, init_func):
|
|||
|
|
base_class = globals().get(base_class_name, object)
|
|||
|
|
if init_func is not None:
|
|||
|
|
init_func = find_init_func(init_func['module_name_en'], init_func['belong'],
|
|||
|
|
init_func['meta_class_func_name_en'])
|
|||
|
|
new_class = type(
|
|||
|
|
class_name, # 类名
|
|||
|
|
(base_class,), # 基类(继承自 object)
|
|||
|
|
{
|
|||
|
|
"__init__": init_func,
|
|||
|
|
}
|
|||
|
|
)
|
|||
|
|
return new_class
|
|||
|
|
|
|||
|
|
|
|||
|
|
def find_init_func(packages_name, modules_name, function_name):
|
|||
|
|
modules_path = f"{packages_name}.{modules_name}"
|
|||
|
|
modules = importlib.import_module(modules_path)
|
|||
|
|
# 获取函数
|
|||
|
|
func = getattr(modules, function_name)
|
|||
|
|
return func
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 常规一行根据数据库创建新类
|
|||
|
|
def create_class_from_db(attr_data, funcs_data, init_func=None):
|
|||
|
|
new_class = create_class(funcs_data["meta_class_name_en"], funcs_data["type"], init_func)
|
|||
|
|
new_class.add_field_to_class(attr_data["member_field"])
|
|||
|
|
for add_funcs in json.loads(json.dumps(funcs_data))["meta_class_func"]:
|
|||
|
|
new_class.add_function_to_class(add_funcs['module_name_en'], add_funcs['belong'],
|
|||
|
|
add_funcs['meta_class_func_name_en'])
|
|||
|
|
return new_class
|