胶码去除。
acetone的Python项目详细描述
关于
胶码去除。丙酮是一个python库,提供 在其他方法不方便或不方便的情况下进行控制 甚至不可能。或者你只是喜欢图书馆。
用法
在应用程序中的某个位置创建丙酮容器:
# dependencies.pyfromacetoneimportAcetoneContainerdependencies=AcetoneContainer()# or ioc_container# or lord_of_the_dependencies# or services
然后使用它:
# class_with_dependency.pyfromdependenciesimportdependenciesclassClassWithSomeDependency(object):# you can use strings or types as a keydependency=dependencies.Dependency('key')defuse_the_dependency(self):self.dependency.dependency_call('argument')
创建依赖项实现:
# dependency_implementation.pyclassDependencyImplementation(object):defdependency_call(self,argument):print(argument)
稍后注册实现并运行它!
# __main__.pyfromdependenciesimportdependenciesfromclass_with_dependencyimportClassWithSomeDependencyfromdependency_implementationimportDependencyImplementationif__name__=='__main__':dependency_implementation=DependencyImplementation()dependencies.register_instance('key',dependency_implementation)instance=ClassWithSomeDependency()instance.use_the_dependency()
或者从文件中加载:
[{"name":"key","module":"dependency_implementation","factory":"DependencyImplementation","singleton":true}]
importjsonfromdependenciesimportdependenciesdefmain():withopen('configuration.json')asfile:content=json.load(file)dependencies.load_from_dicts(content)instance=ClassWithSomeDependency()instance.use_the_dependency()
常见问题
有多快?
很快。它甚至比一个内建的房子还要快。第一次 依赖项访问需要对其自身的设置进行一些初始化,并且 依赖项创建(前提是它以前没有创建过),但是 后续调用与成员实例访问一样快。依赖关系 使用描述符协议(由@property使用),它们将被初始化 懒洋洋地,一旦从容器中取出,它们就被设置为正常的 实例成员(类依赖时为类成员)。这个把戏是 由多个框架使用(例如werkzeuq cached_属性)。
我该怎么嘲笑它?
严格来说你可以嘲笑它,但我觉得没必要。这个 容器简单,测试良好。其目的是提供 请求的依赖项和依赖项也可以是模拟的。你可以 只需将其视为代码的一个重要部分,而不是嘲笑它 你的优势(你会模仿房产吗?).
classTestXyz(TestCase):deftearDown(self):container.clean()
传统主义者不一定同意,但python不是由 首先是传统主义者。
有什么要求吗?
没有外部依赖关系。对于使用的类,唯一的要求是 该类必须是具有__dict__的普通python类。在 换句话说,它不能使用__slots__。