1. å
¶å®æä¸è®¤ä¸ºç´æ¥æèµ/ IoCæ¯å¨Pythonãä»ä¹æ¯å´æ¯ç´æ¥æèµ/ IoCã
æ³æ³çï¼ä»ä¹æ¯ä¸ä¸ªDI容å¨å¢ï¼å®å¯ä»¥è®©ä½
è¿çº¿è¿æåºç¨ç¨åº...
...å¨
æ们æâæ¥çº¿åâåâ
èæ¬
å¨æ
æ以ï¼ä¸ä¸ªDI容å¨ä¸è¿æ¯ä¸ä¸ªè§£éçå¨æèæ¬è¯è¨ãå®é
ä¸ï¼å¦ä¸ç§æ¹å¼æ¯ï¼ä¸ä¸ªå
¸åçJava / .NETçDI容å¨ä¸è¿æ¯ä¸ä¸ªè¹©èç解éå¨ä¸ä¸ªé常ç³ç³çå¨æèæ¬è¯è¨ä¸å¯¹æ¥ä¸éï¼å¾å¾åºäºXMLçè¯æ³ã
å½ä½ å¨Pythonç¨åºï¼ä½ 为ä»ä¹ä¼æ³è¦ä¸ä¸ªä¸éçï¼åçèæ¬è¯è¨ï¼å½ä½ æä¸ä¸ªç¾ä¸½ç CodeGo.netï¼è¾ç
çèæ¬è¯è¨å¨æ¨çå¤ç½®ï¼å
¶å®ï¼è¿æ¯ä¸ä¸ªæ´æ®éçé®é¢ï¼å½æ¨å¨å ä¹ä»»ä½è¯è¨è¿è¡ç¼ç¨ï¼ä¸ºä»ä¹ä½ æ³ï¼å½ä½ æJythonåIronPythonçå¨æ¨çå¤ç½®ä¸ä¸ªä¸éçï¼åçèæ¬è¯è¨ï¼
å æ¤ï¼è¦æ¦æ¬ä¸ä¸ï¼DI / IOCçåæ³æ¯ä¸æ ·éè¦çå¨Pythonä¸ï¼å 为å®æ¯å¨Javaä¸ï¼å¯¹äºå®å
¨ç¸åçåå ã该DI / IOCçä½æ¯ï¼æ¯å»ºç«å¨è¯è¨åç»å¸¸å¦æ¤è½»å·§çæ¶å¤±ã ï¼è¿éæä¸ä¸ªæ¯å»ï¼å¨ç»è£
ï¼åç¨åºè°ç¨æ¯ä¸ä¸ªç¸å½å¤§ç交æ-ä½ è¦ä¿åä½ çå±é¨åéåå¯åå¨ä¿åè¿åå°åçæ令æéæ´æ¹ä¸ºä½ æå¼å«çåç¨åºï¼å®æå®è·³åä½ çåç¨åºå½å®å®ææ¶ï¼æé£éç被å«æ¹å¯ä»¥æ¾å°ä»ä»¬ï¼çIOWï¼å¨ç»è£
ï¼âåç¨åºè°ç¨âæ¯ä¸ç§è®¾è®¡æ¨¡å¼ï¼åä¹åæ类似çFortranè¯è¨ï¼å
¶ä¸æ建äºåç¨åºè°ç¨ï¼äººä»¬å»ºç«èªå·±çèªå·±çâåç¨åºä½ ä¼è¯´ï¼åç¨åºè°ç¨æ¯âå¨Pythonä¸ï¼åªæ¯ä½ ä¸'åç¨åº
BTWï¼å¯¹äºä»ä¹æ ·åéåDIå
¶é»è¾çä¾åæ¥ççåradçBrachaçæ°è¯ç¼ç¨è¯è¨ä»¥åä»çèä½ç主é¢ï¼
æé å½æ°æ¯æ害ç
注å
¥æ»å
ç¦æ¢å¯¹å¯¼å
¥ï¼ç»ï¼
2.
é¨ååå æ¯æ¨¡åç³»ç»å·¥ä½å¨Pythonçæ¹å¼ãä½ å¯ä»¥å¾å°ä¸ç§âå身âfreeçï¼åªæ¯ä»ä¸ä¸ªæ¨¡åä¸å¯¼å
¥å®ãå®ä¹ä¸ä¸ªå¯¹è±¡çå®é
å®ä¾ä¸çä¸ä¸ªæ¨¡åï¼ç¶åä»»ä½å®¢æ·ç«¯ç«¯ä»£ç å¯ä»¥å¯¼å
¥å¹¶çæ£å¾å°ä¸ä¸ªå·¥ä½ï¼å
¨é¢æ建/å¡«å
对象ã
è¿æ¯ç¸å¯¹äºJavaçï¼å¨é£éä½ ä¸å¯¼å
¥å¯¹è±¡çå®é
æ
åµãä½ æ»æ¯æèªå·±å®ä¾åå®ä»¬ï¼ï¼æåºçIoC / DIæ ·å¼çæ¹æ³ï¼ãæ¨å¯ä»¥åè½»ä¸å¿
èªå·±ææ¥æçéæï¼æå®é
å·¥åç±»ï¼å®ä¾åä¸åçtroubleï¼ä½ä½ ä»ç¶æè´å®é
å建æ°çæ¯é¡¹èµæºå¼é
3.
使å¾Djangoçæ§å¶å转çãä¾å¦ï¼æ°æ®åºæå¡å¨è¢«éä¸çé
ç½®æ件ï¼ç¶åæä¾ç¸åºçæ°æ®åºå°è£
å®ä¾çæ°æ®åºå®¢æ·ç«¯ç«¯ã
ä¸åçæ¯ï¼Pythonæä¸æµçç±»åãæ°æ®ç±»åï¼å
æ¬ç±»ï¼é½æ¯èªå·±ç对象ãå¦æä½ æ³è¦ä¸ä¸ªç¹å®çç±»ï¼åªæ¯è¿ä¸ªç±»ãä¾å¦ï¼
if config_dbms_name == 'postgresql':
import psycopg
self.database_interface = psycopg
elif config_dbms_name == 'mysql':
...
ååæ¥ç代ç å¯ä»¥éè¿ä¹¦é¢è¡¨åå建ä¸ä¸ªæ°æ®åºæ¥å£ï¼
my_db_connection = self.database_interface()
# Do stuff with database.
åè代ä¹çæ ·æ¿å·¥åçå½æ°ï¼JavaåC ++çéè¦ï¼Pythonåå®ä¸æ®éç代ç ä¸è¡æ两è¡ãè¿æ¯å½æ°æ§å½ä»¤å¼ç¼ç¨çåéã
4.
å¨æçæ¥ï¼è¿æ ·çäºæ
ä¾èµæ³¨å
¥æ¯ä¸ä¸ªåæ§çï¼å½ä»£ç è¿äºæ²éç主ä½è½»ææ¹åï¼ä½ ä¼åç°èªå·±ä¸å¾ä¸æäºå°é¨åï¼å®ä¹æ¥å£ä¸ºä»ä»¬ï¼ç¶å让人们æ¹åè¡ä¸ºçç¶éè¿è¯¥æå
¥è¿äºæ¥å£ç对象ãè¿ä¸åé½å¾å¥½ï¼ä½æ好é¿å
å¨é¦ä½é£ç§ã
è¿ä¹æ¯ä¸ä¸ªéæç±»åè¯è¨ççç¶ãå½ä½ è¦è¡¨è¾¾æ½è±¡çå¯ä¸å·¥å
·æ¯ç»§æ¿ï¼é£ä¹è¿å°±æ¯å ä¹ä»ä¹æ å¤ä¸å¨ãè¯è½å¦æ¤ï¼C ++æ¯é常类似çï¼ä½ä»æ¥æ²¡ææ¿èµ·è¿·æ建设è
åæ¥å£æ å¤ä¸å¨çJavaå¼å人ååäºãè¿æ¯å¾å®¹æå¾å°è¿åº¦æºçè½å¤ä»¥çµæ´»ä¸å¯æ©å±çï¼å¾å°çæ£ç好å¤åäºå¤ªå¤çéç¨ä»£ç çææ¬ç梦æ³ãæ认为è¿æ¯ä¸ä¸ªæåçä¸è¥¿ã
é常æ
åµä¸ï¼æ认为Pythonç人æ¥éæ©åéçå·¥å
·æ¥å®æå·¥ä½ï¼è¿æ¯ä¸ä¸ªè¿è´¯çåç®åçæ´ä½ï¼èä¸æ¯ä¸ä¸ªçæ£çå·¥å
·ï¼ä¸ä¸ªå¯è½çæ件ï¼ï¼å¯ä»¥åä»ä¹ï¼ä½æä¾äºå¯è½çé
ç½®æå让人ç¼è±ç¼ä¹±ãè¿æ¯æå¯äºæ¢çé¶ä»¶å¨å¿
è¦æ¶ï¼ä½ä¸éè¦å®ä¹åºå®æ¥å£ï¼ç±äºé¸æååè¯è¨çç¸å¯¹ç®åççµæ´»æ§å¤§è¡¨å主ä¹ã
5.
é¿é£æ¸¯'çPythonå¨å¥½å å¹´ï¼ä½æä¼è¯´ï¼å®æ´å¤çæ¯ä¸å®æ¯ä¸ä¸ªå¨æç±»åçè¯è¨æ¯ä»ä¹é½éè¦ã举个ç®åçä¾åï¼å¨Javaä¸ï¼å¦æææ³æµè¯åä¿¡ç»æ åè¾åºéå½å°æDIåä¼ éä»»ä½çPrintStreamææåå
¥çæå并è¿è¡éªè¯ãå½æå¨Rubyä¸æçå·¥ä½ï¼ä½æ¯ï¼æå¯ä»¥å¨ææ¿æ¢âçè·ææâçæ¹æ³å¨æ åè¾åºåéªè¯ï¼çåºæ¥çå¾çãå¦ææå建ä¸ä¸ªæ½è±¡çå¯ä¸åå æ¯æµè¯ç±»ï¼âå®ï¼è®¤ä¸ºæ件系ç»æä½æJavaä¸çæ¶éï¼ï¼é£ä¹ç´æ¥æèµ/ IoCå建ç解å³æ¹æ¡ã
6.
æåæ¥â约å°æ ¼・Wç±³å¡æ ¼âåçï¼âDI / IOCçPythonæ¯å¦æ¤è½»å·§çæ¶å¤±âã
è¦å¤ä»½æ¤çä¸çå¨Martin Fowlerçä¾å移æ¤ä»Javaå°Pythonï¼Pythonçï¼Design_Patternsï¼Inversion_of_Control
æ£å¦æ¨å¯ä»¥ä»ä¸é¢çé¾æ¥ï¼ä¸ä¸ªâ容å¨âå¨Pythonä¸çå°å¯ä»¥åæ8è¡ä»£ç ï¼
class Container:
def __init__(self, system_data):
for component_name, component_class, component_args in system_data:
if type(component_class) == types.ClassType:
args = [self.__dict__[arg] for arg in component_args]
self.__dict__[component_name] = component_class(*args)
else:
self.__dict__[component_name] = component_class
7.
IoCårubyï¼è¿æ¯æçæ³æ³ï¼ä¸ºä»ä¹å®æ²¡æ被广æ³æµä¼
æ´æ°ï¼
æä¸æ¯æé£ä¸ªç½ç«äºï¼é¾æ¥ä¸å·¥ä½ï¼ä½å¯ä»¥å¨è¿éé
读
8.
å
¶å®ï¼è¿æ¯å¾å®¹æååºè¶³å¤å¹²åç代ç ä¸DIï¼æä¸ç¥éï¼ä¼ä¸ä¼è¢«/ Pythonçåçï¼ç¶åï¼ä½æ 论å¦ä½:)ï¼ï¼ä¾å¦æå
¶å®pereferè¿æ ·ç¼ç ï¼
def polite(name_str):
return "dear " + name_str
def rude(a):
return name_str + ", you, moron"
def greet(name_str, call=polite):
print "Hello, " + call(name_str) + "!"
_
>>greet("Peter")
Hello, dear Peter!
>>greet("Jack", rude)
Hello, Jack, you, moron!
æ¯çï¼è¿å¯ä»¥çä½æ¯å½æ°/ç±»åªæ¯ä¸ä¸ªç®åç表åï¼ä½å®ç¡®å®å·¥ä½ãæ以ï¼ä¹è®¸Pythonçé»è®¤é带ççµæ± 足å¤å¨è¿éäºã
P.S.æä¹è´´è¿ç§å¹¼ç¨çåæ³ä¸ä¸ªæ´å¤§ç示ä¾å¨å¨æè¯ä¼°å¨Pythonç®åçå¸å°é»è¾ã
温馨提示:内容为网友见解,仅供参考
为什么在python中是ioc \/ di不常见
部分原因是模块系统工作在Python的方式。你可以得到一种“单身”free的,只是从一个模块中导入它。定义一个对象的实际实例中的一个模块,然后任何客户端端代码可以导入并真正得到一个工作,全面构建\/填充对象。这是相对于Java的,在那里你不导入对象的实际情况。你总是有自己实例化它们,(排序的IoC \/ D...
python数据处理相关操作——loc、ioc、ix选取数据
loc方法通过标签选取数据。选取数据框中所有列的数据,可以表示为 loc[:, :]。根据标签选取数据更为直观,例如选取所有名为a的数据,可以表示为 loc['a']。ix方法较为灵活,可以同时使用行号和标签进行选取,兼容iloc和loc的使用方式。例如选取所有名为a且位于第一行的数据,可以表示为 ix['a', 0...
我说spring简直就是忽悠人的
我恶心java不是有两个原因,1是太墨迹了,比较臃肿,不简洁,不过也许看习惯就好了吧。2是当年的java,一弹出java那个窗口我就脑袋疼,512内存的机器基本跑个java程序就不用干什么了。不过这已经是过去式。java没有走下坡路,无论是C还是java都是编程的常青树。可以上各大权威网站查询。spring不是忽悠...
django如何执行exe文件(2023年最新分享)
首先你要明白这个命令是分三部分的,第一个是启动Python来执行文件,第二个是执行的文件名(setup.py),第三个是参数(install)。C:\\python27\\django\\python是不能执行的,因为在那个目录下并没有叫Python.exe的可执行文件。正确的写法应该是: c:\\python27\\pythonc:\\python27\\django\\setup.pyinstall 或者直接c:\\pyt...
java学完基础直接学框架(学java框架要多久)
PS:JavaSE的内容非常庞大,任何一套JavaSE教程都不会把所有的方法讲一遍,只会挑平时工作中常用的内容来讲解,所以JavaSE里面的内容很多都是课后自己在API文档中慢慢宽咐了解的,你自己一定要学会主动学习,不能坐以待毙。 推荐学习书籍:Java核心技术 二、数据库篇 数据库是学习Java语言必学的一项内容,常见的数据库就...
如何Android的资源和资源ID工作之间的映射
OR映射Java JDOJDO标准的一个实现Java HiveMind类似Spring的东西,微内核DI容器Java ExcaliburIoC容器Java 组件(共82)APR不同操作系统间可移植运行时库C\/C++ RegexpJava正则表达式Java OROPerl风格的正则表达式Java XercesXML解析,Java\/C两种版本Java\/C++ CrimsonXML解析器Java AXIOM更高效的DOM实现Java...
reportlab 怎么安装
1. 先安装pip a) https:\/\/pip.pypa.io\/en\/latest\/installing.html b) 获取上面网址的get-pip.py c) 运行python get-pip.py d) 安装完成之后 pip应用程序安装在C:\\Python27\\Scripts目录下,把这个路径加到path环境变量里面 e) cmd-》 输入pip -》可看到命令帮助,表示安装成功...
java学习路线
如需学习Java,推荐选择【达内教育】。Java学习路线一般有以下几个阶段:第一阶段,JavaSE基础:Java环境搭建、Java流程控制语句-for循环、switch选择判断、循环嵌套、数组拷贝等。第二阶段,JavaWeb:MySQL安装、管理、创建数据库、MySQLUPDATE查询、Mysql高级操作等。第三阶段,Java高级框架-SSH:Struts2异常...
零基础能学JAVA开发吗?
1、透彻理解面向对象 只有理解了面向对象才能感知Java开发的绝妙, 面向对象是Java中很重要的一个概念,如果理解不透彻的话,你可以在后期编程时会依然遵循面向过程的模式,理解概念很重要,但并不能帮助你太多,最重要的是要学会有面向对象概念来设计一个解决方案 2、掌握核心的API 看着容易做着难,能...
应该怎样学习JAVA?顺序是什么?
学习JavaEE或JavaME之前,JavaSE是必学的。Java开发环境搭建 Java基础语法 面向对象 数组 异常 集合 线程 IO流 反射机制 注解Annotation 网络编程 第二部分:数据库 【MySQL + JDBC】只要学习编程,数据库是一定要学习的,是一门公共的学科。java、C、python、C#等程序员都需要学习数据库。数据库产品...