You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让两个辅助函数返回不同值?附Python插件注册代码片段

解决两个辅助函数返回不同数值的问题

嘿,我来帮你搞定这个问题!首先看你给出的代码,核心问题在于全局固定的priority变量——所有插件函数都被注册到同一个优先级的扩展点里,这就没法区分不同的辅助函数让它们返回不同值。咱们一步步修改代码来实现需求:

第一步:修复原代码bug并扩展功能

先补全并修正你提供的代码,主要做这几个关键改动:

  • 让PluginFunctions.register支持自定义优先级参数,不再依赖全局固定值
  • 修正ExtensionPoint.unregister_module的判断逻辑(原代码里的匹配项搞反了)
  • 补全PluginFunctions.unregister方法
  • 添加获取指定优先级函数的方法,方便调用不同辅助函数

完整代码如下:

from collections import defaultdict

class ExtensionPoint:
    def __init__(self):
        self.__items = []
    
    def register(self, module, item):
        self.__items.append((module, item))
    
    def unregister_module(self, name):
        # 修正:过滤掉模块名称匹配的项,假设module是模块对象,取__name__属性
        self.__items = [item for item in self.__items if item[0].__name__ != name]
    
    def get_items(self):
        # 添加获取所有注册项的方法,返回函数列表
        return [item[1] for item in self.__items]

class PluginFunctions:
    def __init__(self):
        self.functions = defaultdict(ExtensionPoint)
    
    def register(self, module, item, priority=1):  # 添加priority参数,默认值为1
        self.functions[priority].register(module, item)
    
    def unregister(self, item, priority=1):
        # 根据优先级和函数项移除目标
        target_ext = self.functions.get(priority)
        if target_ext:
            target_ext._ExtensionPoint__items = [
                (mod, func) for mod, func in target_ext._ExtensionPoint__items 
                if func != item
            ]
    
    def get_functions_by_priority(self, priority):
        # 获取指定优先级下的所有函数
        return self.functions[priority].get_items()

第二步:注册两个返回不同数值的辅助函数

现在咱们注册两个辅助函数,分别放到不同的优先级里,让它们返回不同值:

# 定义两个返回不同数值的辅助函数
def helper_func1():
    return 100  # 返回第一个目标数值

def helper_func2():
    return 200  # 返回第二个目标数值

# 初始化插件管理器并注册函数
plugin_manager = PluginFunctions()
# 把helper_func1注册到优先级1,helper_func2注册到优先级2
plugin_manager.register(__name__, helper_func1, priority=1)
plugin_manager.register(__name__, helper_func2, priority=2)

# 测试调用,验证返回值
funcs_priority1 = plugin_manager.get_functions_by_priority(1)
funcs_priority2 = plugin_manager.get_functions_by_priority(2)

print(funcs_priority1[0]())  # 输出:100
print(funcs_priority2[0]())  # 输出:200

关键改动说明

  • 让register方法支持自定义priority,这样不同的辅助函数可以被归类到不同的扩展点
  • 添加get_functions_by_priority方法,能精准获取对应优先级的函数,调用自然返回不同数值
  • 修正了unregister_module的逻辑,确保卸载模块的功能正常运行

这样你就能轻松实现两个辅助函数返回不同数值的需求啦!

内容的提问来源于stack exchange,提问作者vishal choudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:29:10