Python自动加载模块
autoload-module的Python项目详细描述
自动加载模块
这个库将为您提供舒适的Python元编程。
下面是一个简单的例子。在
- 目录
project/
├ example.py
└ validator/
├ validator_a.py
├ validator_b.py
└ validator_c.py
- 在示例.py在
安装
pip install autoload-module
使用
构造函数
ModuleLoader([base_path])
ModuleLoader可以不带参数生成。 在这种情况下,实例具有绝对路径,其中 它已初始化。在
- 目录
/usr/local/src/project/
├ example.py
└ validator/
├ validator_a.py
├ validator_b.py
└ validator_c.py
- 在示例.py在
fromautoload.module_loaderimportModuleLoader# The instance has '/usr/local/src/project/'loader=ModuleLoader()# load modules in the directory; '/usr/local/src/project/validator/'validator_classes=loader.load_classes("validator")
如果要更改基路径,则必须使用绝对路径参数生成ModuleLoader。在
loader=ModuleLoader('/user/local/src/custom')
方法
加载类
load_classes(pkg_name, [excludes])
这个方法读取Python包并返回类对象的元组。在
- 目录
project/
├ __init__.py
├ config.yaml
├ example.py
├ validator_a.py
├ validator_b.py
└ validator_c.py
- 验证器
classValidatorA:defvalidate(self):print("validateA!!")
- 在示例.py在
loader=ModuleLoader()# Automatically read modules without '__init__.py', not py file, and this file.# return the tuple of ValidateA, ValidatorB, and ValidatorC class objectsvalidator_classes=loader.load_classes("project")# initialize and execute method[clazz().validate()forclazzinvalidator_classes]# -> validateA!!# -> validateB!!# -> validateC!!
您还可以使用excludes
变量仅加载特定模块,如下所示。在
# 'excludes' is a iterable object like tuple, list.# You must specify module names in 'excludes'.validator_classes=loader.load_classes("project",["validator_a","validator_b"])[clazz().validate()forclazzinvalidator_classes]# -> validateC!!
您可以指定pkg_name
,如下所示。在
loader.load_classes("validator.py")loader.load_classes(".validator")loader.load_classes("/validator")loader.load_classes("./validator")# relative pathloader.load_classes("..packageA.validator")loader.load_classes("../packageA/validator")
加载函数
load_functions(pkg_name, [excludes])
这个方法读取Python包并返回函数的元组。
用法与load_classes
相同。在
注释
- 要搜索类或函数,必须匹配文件名和类或函数名。
例如,如果将文件命名为
test_module.py
,则必须将类TestModule
或函数test_module
命名。 当您想自定义它们的名称时,请使用@load_config
decorator并手动编写load=True
。- 验证器
fromautoload.decoratorimportload_config@load_config(load=True)classCustomValidator:defvalidate(self):print("validateA!!")
在 - 还可以使用
@load_config
修饰符控制加载类对象的顺序。- 验证器
fromautoload.decoratorimportload_config# sort in ascending order@load_config(order=1)classValidatorA:defvalidate(self):print("validateA!!")
在
加载类
load_class(file_name)
这个方法读取Python文件并返回类对象。在
- 目录
project/
├ example.py
└ validator.py
- 在验证器.py在
classValidator:defvalidate(self):print("validate!!")
- 在示例.py在
loader=ModuleLoader()clazz=loader.load_class("validator")clazz().validate()# -> validate!!
如何指定file_name
与{
加载功能
^{pr21}$这个方法读取Python文件并返回一个函数对象。
用法与load_class
相同。在
许可证
根据麻省理工学院的许可证发布。在
- 项目
标签: