胶码去除。

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__

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

推荐PyPI第三方库


热门话题
不推荐使用java AmazonKinesisClient构造函数   java Quartz作业是否在同一个JVM中以自己的线程运行?   在Java中接收安卓推送通知以进行测试   java是对集合进行排序的最佳方法?   安卓 java。lang.NoSuchMethodError org。阿帕奇。http。客户乌提尔斯。我是杜提尔。encPath   java为什么while循环不以额外的“or”条件结束?   Python能否识别Java中使用BCrypt的哈希密码?   在Cygwin中使用附加Java库的windows   java无法从SQLite检索数据   java使用Swingworker给出不正确的结果   使用多线程服务器向特定客户端发送java消息   java在映射未知的Morphia中查询对象