插件、动态加载和工厂实用程序库

pluggage的Python项目详细描述


塞规

用于在python中使用插件的实用程序库 有两种方法可以使用此库动态加载对象, 通过字典接口和更重的 使用基类向工厂注册对象的工厂模式。

轻量级插件

轻量级插件系统使用字典api加载点分隔的名称。 并返回对象或选择性地调用它。

frompluggage.pluginsimportPluginsloader=Plugins()# load references to objectsfunc_ref=loader['some_module.some_submodule.some_function']cls_ref=loader['some_module.some_submodule.SomeClass']# call the objects and get the resultsfunc_result=loader('some_module.some_submodule.some_function',*func_args,**func_kwargs)someclass_instance=loader('some_module.some_submodule.SomeClass',*ctor_args,**ctor_kwargs)

重量级插件

重量级插件是通过元类注册表实现的,该注册表允许类 在导入时注册为插件,然后通过命名工厂访问。 从基本插件类继承的类指定要向哪个工厂注册 默认情况下,将使用它们的类名在该工厂下注册,或者也可以由继承重写。 可以使用pluggage.registry模块中提供的get_factory调用访问插件。

factory=get_factory('my_factory')some_class_instance=factory('SomeClass',*ctor_args,**ctor_kwargs)

要向工厂注册一个类,请从pluggageplugin类继承并设置pluggage\u factory\u name class属性:

frompluggage.factory_pluginimportPluggagePluginclassSomeClass(PluggagePlugin):"""
    sample plugin
    """PLUGGAGE_FACTORY_NAME='my_factory'def__init__(self,value):self.value=valuedef__call__(self):print(value)factory=get_factory('my_factory')some_class_instance=factory('SomeClass','abc')some_class_instance()# prints 'abc'

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

推荐PyPI第三方库


热门话题
java如何在点击JButton触发的进程仍在处理时更新JLabel?   try-catch为什么Java有嵌套的try语句?   java SSH命令执行失败,出现异常“net.schmizz.sshj.connection.ConnectionException:引发连接重置异常”   java在ApacheCamel的接口类解析器中,resolveMandatoryClass(字符串名称)有什么用途?   java如何在Eclipse远程调试器中找到有问题的线程?   java线程:containerlaunch退出代码127的异常   lambda左连接Java中的2个对象列表   Swift 2.0协议扩展和Java/C抽象类之间有区别吗?   安卓改造:使用GSON将JSON解析为多个Java对象   Spring中服务层的java角色(澄清)   html Java与网站的通信   Spring boot rest api是在不创建java类的情况下将getResultList()转换为映射以显示响应的最佳方法吗?   使用“getElementById”从javascript获取值到java   java如何在文本视图中以粗体和多色显示文本   java是设置TextView颜色的最有效方法