Files
vermouth789 fe39320977 123
123
2026-01-11 00:11:34 +08:00

89 lines
3.3 KiB
Python

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