# -*- coding: utf-8 -*-
"""
Created on Thu Dec 11 15:16:12 2025
@author: lvan1
"""
import json
import os
import sys
import importlib
class PluginSystem:
def __init__(self, plugin_dir='plugins'):
self.plugin_dir = plugin_dir
self.plugins = {}
self.load_plugins()
def load_plugins(self):
"""加载所有插件"""
if not os.path.exists(self.plugin_dir):
os.makedirs(self.plugin_dir)
for filename in os.listdir(self.plugin_dir):
if filename.endswith('.py'):
plugin_name = filename[:-3]
self.load_plugin(plugin_name)
def load_plugin(self, plugin_name):
"""动态加载单个插件"""
plugin_path = os.path.join(self.plugin_dir, f"{plugin_name}.py")
if os.path.exists(plugin_path):
# 动态导入插件模块
spec = importlib.util.spec_from_file_location(
plugin_name, plugin_path
)
module = importlib.util.module_from_spec(spec)
sys.modules[plugin_name] = module
spec.loader.exec_module(module)
# 注册插件函数
if hasattr(module, 'register'):
module.register(self)
self.plugins[plugin_name] = module
def register_function(self, name, func):
"""注册插件提供的函数"""
setattr(self, name, func)
def hot_reload_plugin(self, plugin_name):
"""热重载插件"""
if plugin_name in self.plugins:
importlib.reload(self.plugins[plugin_name])
plugins的下的文件的文件名为add.py
def add(x, y):
return x + y
# 使用示例
system = PluginSystem('plugins')
"""system.plugins['add']指向的就是module
system.plugins['add'].add则是调用add module中的add函数
"""
print(system.plugins['add'].add(1,2))