from abc import ABC, abstractmethod import importlib # 定制空的抽象工厂、根据后面逻辑对抽象工厂中装入实体工厂 class AbstractFactory(ABC): # 动态加载函数并绑定到类 @classmethod def add_function_to_class(cls, packages_name, modules_name, function_name): """ 动态加载模块中的函数并绑定到类 :param packages_name: 包名称 :param modules_name: 模块名称,例如 "functions" :param function_name: 函数名称,例如 "greet" :param cls: 要绑定函数的类 """ # 动态加载模块 modules_path = f"{packages_name}.{modules_name}" modules = importlib.import_module(modules_path) # 获取函数 func = getattr(modules, function_name) # 将函数绑定到类 setattr(cls, function_name, func) @classmethod def add_field_to_class(cls, data): print(data) for k, v in data.items(): setattr(cls, k, v) @classmethod def generate_class_code(cls): # 类定义行 class_code = f"class {cls.__name__}({', '.join(base.__name__ for base in cls.__bases__)}):\n" # 遍历类的属性和方法 for name, value in cls.__dict__.items(): if not name.startswith('__'): # 忽略特殊方法 if callable(value): # 如果是方法 method_code = f" def {name}(self):\n" method_code += f" return {repr(value(None))}\n" # 简单示例,实际需要解析方法体 class_code += method_code else: # 如果是属性 class_code += f" {name} = {repr(value)}\n" return class_code class AbstractProduce(ABC): # 动态加载函数并绑定到类 @classmethod def add_function_to_class(cls, packages_name, modules_name, function_name): """ 动态加载模块中的函数并绑定到类 :param packages_name: 包名称 :param modules_name: 模块名称,例如 "functions" :param function_name: 函数名称,例如 "greet" :param cls: 要绑定函数的类 """ # 动态加载模块 modules_path = f"{packages_name}.{modules_name}" modules = importlib.import_module(modules_path) # 获取函数 func = getattr(modules, function_name) # 将函数绑定到类 setattr(cls, function_name, func) @classmethod def add_field_to_class(cls, data): for k, v in data.items(): setattr(cls, k, v) @classmethod def generate_class_code(cls): # 类定义行 class_code = f"class {cls.__name__}({', '.join(base.__name__ for base in cls.__bases__)}):\n" # 遍历类的属性和方法 for name, value in cls.__dict__.items(): if not name.startswith('__'): # 忽略特殊方法 if callable(value): # 如果是方法 method_code = f" def {name}(self):\n" method_code += f" return {repr(value(None))}\n" # 简单示例,实际需要解析方法体 class_code += method_code else: # 如果是属性 class_code += f" {name} = {repr(value)}\n" return class_code