import os import importlib

services_abspath_arr = [] services_arr = [] services_dir = os.getcwd() + '\services'

遍历模块文件(绝对路径)加到services_abspath_arr数组

选择服务函数

def service_select(str): for service_item in services_arr: if str.capitalize() == service_item.class.name: return service_item

def foreach_file(path_name): for root, dirs, files in os.walk(path_name): for f in files: services_abspath_arr.append(os.path.join(root, f))

读取模块

f:文件路径

def loadModule(f): # 将f变成相对路径 f = f.replace(services_dir + '', '').replace('.py', '').replace('', '/') mod = importlib.import_module( 'services.' + f.replace('/', '.') ) arr_1 = f.split('/') cs_service = getattr(mod, arr_1[len(arr_1) - 1].capitalize()) # service的class形式 service = cs_service() # print(services) services_arr.append(service)

foreach_file(services_dir) for f in services_abspath_arr: if f.find('.pyc') == -1 and f.find('init') == -1: # print(f) loadModule(f)

上面的代码实现了以下功能:

1. 遍历指定目录下的所有模块文件,并将其绝对路径加入到一个数组中

2. 加载这些模块文件,并将其中的服务类实例化,将其加入到一个服务数组中

3. 提供一个选择服务的函数,根据服务名返回相应的服务实例

以下是一个示例,演示如何使用这些服务:

导入服务选择函数

from service_loader import service_select

选择服务

my_service = service_select('MyService')

调用服务方法

result = my_service.do_something()

输出结果

print(result)


原文地址: https://www.cveoy.top/t/topic/kU0b 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录