Python自动加载模块

autoload-module的Python项目详细描述


自动加载模块

这个库将为您提供舒适的Python元编程。
下面是一个简单的例子。在

  • 目录
project/
 ├ example.py
 └ validator/
   ├ validator_a.py
   ├ validator_b.py
   └ validator_c.py
  • 在示例.py在
^{pr2}$

安装

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_configdecorator并手动编写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相同。在

许可证

根据麻省理工学院的许可证发布。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java随机填充2d数组   java运行时。getRuntime。带有长参数的exec(cmd)   java Minecraft无法放置自定义背景   java AChartEngine YAxis自定义标签区域边距和图表值为字符串?   泛型类的java类型安全错误   整数的java符号等价物。toBinaryString方法?   Java中数组列表的数组   java WebView应用程序在谷歌登录后显示空白屏幕   java从backback中删除特定片段   如果服务器不支持使用的协议,java JSSE是否实现回退?   java Sonarqube正在进行核心漏洞查找。如何解决   javajavax。jcr。UnsupportedPositionOperationException:testVersionable处的节点不可版本化   java在安卓中每隔X小时运行一次文件/函数,无需打开应用程序   java如何为磁盘持久性配置BigMemory?   java BufferWriter不转换383以上的整数   Java7交集类型:规范具体说明了什么?   Java:CollectionHow创建多列   java如何检测运算符的空白   java问题:在firebase中为导航栏中的第二个表单提交数据第一个表单工作正常。实际isse是连接Mainactivity中的另一个活动