插件、动态加载和工厂实用程序库
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'