#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2025/3/15 16:12 # @Author : AngesZhu # @File : enum_utils.py # @Desc : 枚举相关封装类,实现数据生成规则函数与中文字段的对应关系 import importlib from enum import Enum # 自定义异常类 class FunctionNotFoundError(Exception): """当未找到对应的中文字段时抛出此异常""" pass # 动态注册的辅助类 class DynamicFunctionRegistry: """ 动态注册中文字段与函数的辅助类。 """ _registry = {} @classmethod def register(cls, zh_name, func): """ 动态注册一个新的中文字段与函数对应关系。 :param zh_name: 中文字段 :param func: 函数对象 """ if zh_name in cls._registry: raise ValueError(f"中文字段 '{zh_name}' 已经存在") cls._registry[zh_name] = func @classmethod def get_func(cls, zh_name): """ 根据中文字段获取动态注册的函数。 :param zh_name: 中文字段 :return: 对应的函数对象,如果未找到则返回 None """ return cls._registry.get(zh_name) # 定义枚举类 class FunctionEnum(Enum): def __init__(self, zh_name, func): self.zh_name = zh_name # 中文字段 self.func = func # 对应的函数 @classmethod def get_func_by_zh_name(cls, zh_name): """ 根据中文字段获取对应的函数。 :param zh_name: 中文字段 :return: 对应的函数对象 :raises FunctionNotFoundError: 如果未找到对应的中文字段 """ for item in cls: if item.zh_name == zh_name: return item.func # 检查动态注册的函数 dynamic_func = DynamicFunctionRegistry.get_func(zh_name) if dynamic_func: return dynamic_func # raise FunctionNotFoundError(f"未找到中文字段 '{zh_name}' 对应的函数") return None @classmethod def register_dynamic_function(cls, zh_name, func_path): """ 动态注册一个新的中文字段与函数对应关系。 :param zh_name: 中文字段 :param func_path: 函数路径(模块名.函数名) """ module_name, func_name = func_path.rsplit(".", 1) module = importlib.import_module(module_name) func = getattr(module, func_name) DynamicFunctionRegistry.register(zh_name, func) @classmethod def call_function(cls, zh_name, *args, **kwargs): """ 调用已注册的函数,并传递参数。 :param zh_name: 中文字段 :param args: 位置参数 :param kwargs: 关键字参数 :return: 函数执行结果 :raises FunctionNotFoundError: 如果未找到对应的中文字段 """ func = cls.get_func_by_zh_name(zh_name) return func(*args, **kwargs) # 测试代码 if __name__ == "__main__": try: # 查询已有的中文字段对应的函数并调用 func = FunctionEnum.get_func_by_zh_name("函数二") print(func()) # 输出: 这是函数2 # 动态注册新的中文字段与函数 FunctionEnum.register_dynamic_function( "动态函数", "new_function.new_function" # 动态注册的函数路径 ) # 查询动态注册的函数并调用 func = FunctionEnum.get_func_by_zh_name("动态函数") print(func()) # 输出: 这是动态注册的函数 # 查询已有的中文字段对应的函数并调用(带参数) func = FunctionEnum.get_func_by_zh_name("函数二") print(func("参数1", "参数2")) # 输出: 这是函数2,参数:参数1, 参数2 # 查询已有的中文字段对应的函数并调用(可变参数) func = FunctionEnum.get_func_by_zh_name("函数三") print(func(1, 2, key="value")) # 输出: 这是函数3,参数:(1, 2), {'key': 'value'} # 调用无参数的函数 result = FunctionEnum.call_function("函数一") print(result) # 输出: 这是函数1 # 调用带参数的函数 result = FunctionEnum.call_function("函数二", "参数1", "参数2") print(result) # 输出: 这是函数2,参数:参数1, 参数2 # 调用带可变参数的函数 result = FunctionEnum.call_function("函数三", 1, 2, key="value") print(result) # 输出: 这是函数3,参数:(1, 2), {'key': 'value'} # 查询不存在的中文字段 func = FunctionEnum.get_func_by_zh_name("不存在的函数") except FunctionNotFoundError as e: print(e) # 输出: 未找到中文字段 '不存在的函数' 对应的函数