python 3的脏加载程序
dirty-loader的Python项目详细描述
脏装载机
易于使用的加载程序库。
变更日志
版本0.2.2
- 简化代码。
- 添加了BaseFactory方法以从列表或词典中加载项。
版本0.2.1
- 允许三种类型的实例定义:string、structured和structure simplified。
版本0.2.0
- 为班级定制工厂。
- 日志包的默认工厂。
版本0.1.0
- 一些重构。
- 新函数import_class。
安装
$ pip install dirty-loader
主装载机
装载机
使用loader,您可以注册已排序的python模块。当你要求上课时 它将尝试为每个模块加载它,直到找到一个为止。
示例:
fromdirty_loaderimportLoaderloader=Loader()loader.register_module('tests.fake.namespace1')loader.register_module('tests.fake.namespace2')loader.register_module('tests.fake.namespace3')klass=loader.load_class('FakeClass1')fromtests.fake.namespace1importFakeClass1assertklass==FakeClass1# klass is tests.fake.namespace1.FakeClass1 because it exists in first module registered.# Also, you could get an instance of class using factoryobj=loader.factory('FakeClass1',var1='a',var2=2)# You could load classes from packages inside modules registeredklass=loader.load_class('subnamespace.FakeClass1')fromtests.fake.namespace3.subnamespaceimportFakeClass1asSubFakeClass1assertklass==SubFakeClass1# klass is tests.fake.namespace3.subnamespace.FakeClass1 because it exists in first module registered.
加载反转
它的工作方式与loader相同,但在尝试加载类时会反转排序。
示例:
fromdirty_loaderimportLoaderReversedloader=LoaderReversed()loader.register_module('tests.fake.namespace1')loader.register_module('tests.fake.namespace2')klass=loader.load_class('FakeClass1')fromtests.fake.namespace2importFakeClass1assertklass==FakeClass1# klass is tests.fake.namespace2.FakeClass1 because it exists in last module registered.
加载内存空间
使用loadernamespace,您可以注册已排序的命名空间。当你要求上课时 它将尝试为每个名称空间加载它,直到找到一个名称空间为止。每个命名空间都有一个python 模块关联。您可以使用常规加载程序方法加载类,或者 指定要使用的命名空间。
示例:
fromdirty_loaderimportLoaderNamespaceloader=LoaderNamespace()loader.register_namespace('fake1','tests.fake.namespace1')loader.register_namespace('fake2','tests.fake.namespace2')fromtests.fake.namespace1importFakeClass1,FakeClass2,FakeClass3klass=loader.load_class('FakeClass1')fromtests.fake.namespace1importFakeClass1assertklass==FakeClass1# klass is tests.fake.namespace1.FakeClass1 because it exists in last module registered.# Also, you could get a class from specific namespaceklass=loader.load_class('FakeClass1',namespace='fake2)fromtests.fake.namespace2importFakeClass1assertklass==FakeClass1# klass is tests.fake.namespace2.FakeClass1 because you specified it.# Namespace could be specified in string class, tooklass=loader.load_class('fake2:FakeClass1')assertklass==FakeClass1# klass is tests.fake.namespace2.FakeClass1 because you specified it.
加载内存空间反转
它的工作方式与loadernamespace相同,但在尝试加载类时会反转排序。
加载已缓存
带缓存的加载程序版本。
loaderReversedCached
带有缓存的loaderReversed版本。
加载内存空间缓存
带有缓存的loadernamespace版本。
加载内存空间反向缓存
带缓存的loadernamespacerevered的版本。