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)

上面是代码的实现部分,下面是一个简单的测试例子

class UserService: def init(self): self.name = 'User Service'

class ProductService: def init(self): self.name = 'Product Service'

class OrderService: def init(self): self.name = 'Order Service'

模拟在services文件夹下有三个服务文件

分别是user_service.py, product_service.py, order_service.py

每个服务文件中有一个类,类名分别为UserService, ProductService, OrderService

每个类中有一个name属性,值分别为'User Service', 'Product Service', 'Order Service'

通过load_services函数将这三个服务加载到services_arr数组中

def load_services(): services_abspath_arr = [] services_arr = [] services_dir = os.getcwd() + '\services' foreach_file(services_dir) for f in services_abspath_arr: if f.find('.pyc') == -1 and f.find('init') == -1: loadModule(f) return services_arr

测试选择服务函数

services_arr = load_services() service = service_select('User') print(service.name) # 输出 'User Service'

service = service_select('Product') print(service.name) # 输出 'Product Service'

service = service_select('Order') print(service.name) # 输出 'Order Service'


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

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