1
intohole 2017-12-01 13:41:21 +08:00
好像深入学习修饰器功能
|
2
intohole 2017-12-01 13:41:27 +08:00
好想
|
4
misaka19000 2017-12-01 15:41:03 +08:00
https://stackoverflow.com/a/2462076
Python 中在 A 模块中先创建一个对象,之后在 B 模块中使用 import object from A 就可以获取到对象了额 O__O "… |
5
lecher23 OP @misaka19000 其实我这个注入工具主要是解藕服务,以及统一管理一些服务器资源拉,比如说我一个应用程序内部有很多的服务,我希望通过它就可以实现服务的管理,替换的时候只需要更换一个地方声明服务就好了...
|
7
Axurez 2017-12-01 16:41:57 +08:00
@misaka19000 这不就是单例模式嘛,依赖注入可以有多种方式
|
8
Axurez 2017-12-01 16:43:37 +08:00
而且依赖注入容器主要解决的是复杂的依赖关系,比如 A 依赖 B、C,C 依赖 D、E,B 又依赖 E、F,总不能一个一个去替换吧。
|
9
xAx 2017-12-01 16:43:57 +08:00
首先,你要认识到:喜欢搞 py 的人自认为很高雅!
你怎么能说你是抄的 java 呢? 楼主,你要感谢我这一层的存在,不然会有很多喜欢搞 py 的人来 gang 你。 |
10
ipwx 2017-12-01 17:01:32 +08:00
Python 真的需要这种 style 的 design pattern 嘛?
我觉得你这里要实现的功能,用 thread-local context 就能实现啊? thread-local context 而且是 python 里面大量被使用的 design pattern,python community 很熟悉它。 对比你这里提到的 java style 的依赖反转,其实在 python community 是个非常陌生的概念。 thread-local context 的例子: * Flask: request, response, current_app * Celery: current_app, current_task * TensorFlow: default_graph, default_session ... |
11
ipwx 2017-12-01 17:03:38 +08:00
|
12
ipwx 2017-12-01 17:05:39 +08:00
最后提一句,thread-local context 可以以 stack 的方式实现,这样的话就可以配合 with context 来临时把一个 context 推到栈顶,临时替换某个子模块的外部环境,然后退出 with 的时候也同时退出这个 context。这个设计非常之好用。
|
13
LINAICAI 2017-12-01 17:15:17 +08:00
说的这么玄乎,我也是醉了,php 的概念为什么非得炒作?这只是很普通的设计模式吧
|
14
xAx 2017-12-01 17:16:16 +08:00 2
感谢楼上现身说法。
楼主,现在你相信我了吗 |
16
lecher23 OP @ipwx 感谢不吝赐教哈,thread-local context 这个我还真没仔细研究过,改天去啃一下。不过我觉得这个工具在我目前的开发中还是挺有用的,虽然从大家的意见来看的确有很多种实现方式。。。
|
17
aristotll 2017-12-01 18:37:25 +08:00
|
18
janxin 2017-12-01 18:43:00 +08:00
可能我不是很理解依赖注入的设计模式,我的理解是依赖注入需要靠 interface 实现的么,方便替换实现内容。但是 Python 的动态类型不需要这种笨重的方法...
|
19
neoblackcap 2017-12-01 23:59:15 +08:00
@lecher23 为什么需要搞得像 Java 一样复杂的语法,装饰器又不是注解。想注入某些对象,完全可以在参数列表里面加默认值,这可是 Python 这些动态语言的大特性啊,Java 是因为是静态才需要搞成这样啊。
|
20
lecher23 OP @neoblackcap 我并不觉得这个语法复杂,而且在解决系统各个服务的依赖方面,这个方式起码让我觉得比自己在构造服务的时候传参数方便很多..
|