python不支持什么编程方式,python程序编写模式
在遥远的Python王国里,有一个非常热爱编程的少年。他的父母想让他报名参加一个班。问了万能的朋友圈,发现大家推荐的都是同一个老师,叫纪老师。
于是他的父母毫不犹豫地交了一大笔学费,让孩子每周六日下午自习。
青少年学习非常努力,很快学会Python语法、工具和框架。
这就像老师看到了可以雕琢的玉石,告诉他不仅要把代码写对,还要让代码美观、优雅、可读、可维护。
青少年还学习了单元测试、TDD、重构,并努力让自己的代码达到老师要求的标准。
他还把“Python的禅”贴在自己的墙上,经常检查自己的代码,从来不敢违反。
蟒蛇的禅,由重要的花彼得斯
漂亮总比难看好。
显性比隐性好。
简单比复杂好。
复杂总比复杂好。
扁平的比嵌套的好。
疏比密好。
可读性很重要。
.
三年后,少年自以为是Python高手,直到有一天,老师给他布置了一个大作业,其实是一个业务非常复杂的大项目。
少年熬了一夜编程,却悲壮地发现,无论他怎么努力,他的代码都凌乱不堪,毫无吸引力,他写的类和模块都乱糟糟的。
于是他只好问老师,“老师,我的Python和Flask框架已经用的很好了。为什么我完成不了这个项目?”
老师说:“孩子,你只需要导入框架的类,写一点代码就行了。现在您需要自己设计类并抽象它们!”
“怎么设计?”
“我给老师送你一本古书,《设计模式》。回去好好看看。”
少年如获至宝,研究这本20多年前出版的泛黄古书,废寝忘食。还是用c描述的。
他稀里糊涂地看了看,好像懂了,又好像没听懂,只好又问老师。
这次老师又给了他一本书,《Head First 设计模式》。
少年打开后发现这本书是用Java写的,于是一头扎进了Java语言。
这本书很容易理解,青少年喜欢读它。
最后,他满怀信心地用Python开始了那个大项目。
他用Python语言实现了设计模式,解决了一些设计问题,但总觉得不对劲。相比Java和C,感觉怪怪的。
此外,他感到动态语言的不适。每次想重建,总是不敢做。他把自己的困惑告诉了老师。
老师笑道:“我在爪哇王国的时候,总有人说,‘动起来,重建火葬场,真酷。’现在你已经意识到了!"
“Java能避免这个问题吗?”
“Java是静态语言,变量类型一旦确定,就无法更改。它对重构的支持非常好。你有兴趣看吗?那里有很多框架,比如Spring、Spring Boot、MyBatis、Dubbo、Netty,非常繁荣。”
年轻人很向往,于是老师给他写了一张纸条,告诉他到了Java王国就去找IOxqdll,一切就畅通无阻了。
少年告别老师,奔向爪哇帝国。老师整了整衣服,看着东方爪哇帝国的方向,庄严的鞠了三个躬:“五年了,伊娥大人,我辜负了您的重托,又忽悠了一个人做爪哇!”
所以这个老师就是吉森!IOxqdll派去传播Java文化和价值观,可惜入境后被发现,软禁在Python王国。
请把杰森的故事移到《Java 帝国对 Python 的渗透能成功吗?》。
Python没有接口?
巨蟒王接到边境的报告,说最近有很多年轻人涌向爪哇王国。不知道是不是国内政策变了,导致人心浮动。
蟒蛇王大怒,下令彻查。查了一下,所有的线索都指向一个人:吉森。
这一天,Python的特使带着他的士兵来到了Gison的住处。果然,他发现自己又在忽悠年轻人了。
使节又气又笑:“你学了半生不熟的蟒蛇就敢混淆视听,真是可笑。”
吉森看到自己的阴谋被识破,还是很淡定。“大人误会了。我教的是正宗的面向对象设计和设计模式。这种设计模式用Python实现很别扭,所以我推荐他们去学Java。”
“废话,Python写设计模式怎么会别扭?由于Java语法的限制,表达能力较弱。对于一些问题,我们不得不用笨拙的设计模式来解决。我们Python可能会解决语法层面的问题!”
“那你告诉我,设计模式的原理是什么?”吉森问。
"1.面向接口的编程,而不是面向实现的编程。2.优先使用组合而不是继承。”这阻止不了特使。
“Python连个接口都没有。怎么能为接口编程呢?”吉森问。
特使笑道:“说你半生不熟,还不服。你以为这里的接口是你的Java接口?”你忘了Python的鸭子打字了吗?"
ClassDuck:def忠实红酒(self):print(鸭忠实红酒ing )class plane:def忠实红酒(self):print(飞机忠实红酒ing )def lift _ off(entity):entity。忠实红酒()鸭子=鸭子()飞机=
“看,鸭子和飞机都没有实现你所谓的接口,但是它们都可以调用忠诚红酒()方法。这不是面向接口的编程吗?如果非要打个比方的话,这款忠诚红酒就是一个自动化的界面。”
吉森真的没有想到这一层。至于第二个原则,复合优先于继承,每个面向对象语言都可以实现。他叹了口气,没有问。
适配器模式
然后特使说:“鸭子打字很厉害。你没提到设计模式吗?在鸭打字面前,很多设计模式纯属多余。我举个例子,适配器模式。假设客户有这样一个代码,可以把一段日志写入文件当中。”
deflog(file,msg):file.write([{}]-{} )。格式(datetime.now()、msg))
“现在有了把日志写入数据库的新需求,但是数据库没有写方法。我该怎么办?然后写一个适配器。”
classd adapter:def _ _ init _ _(self,db):self.db=dbdefwrite(self,msg):self.db.insert(msg)
“注意,这个DBAdapter不需要实现任何接口(我在Python中没有接口),它只是一个单独的类,只需要一个write方法。”
db_adapter=DBAdapter(db)日志(db_adapter, sev1erroroccurred )
真的很简单。只要有写方法,不管你是什么对象,都可以调用,典型的鸭子打字。
既然适配器可以这样写,代理模式也是类似的。只要您的代理类具有与代理类相同的方法,客户就可以使用它。
但是,这种方法的缺点是,在不知道其参数类型的情况下,很难重构log方法。
单一模式
吉森想到了另一个问题,继续挑战特使:“Python连一个私有关键字都没有。如何隐藏类的构造函数,如何实现singleton?”
特使不屑地说:“忘了你的Java思维吧。用Python写singleton有很多方法。我给你看一个对比Python的方法,用模块的方式实现。”
# singleton . pyclasssingleton:def _ _ init _ _(self):self . name= I msingleton instance=singleton()del singleton #删除构造函数
使用单例:
importsingletonprint(singleton . instance . name)# I msingletoninstance=Singleton()# name错误:未定义名称“Singleton”
Gison真的没有想到这种写法,用Python的模块隐藏信息。
访问者模式
不是每个设计模式都能做到这一点,不是吗?吉布森心想,一个不可理解的模式出现在他的脑海里:访问者,他起初曾努力学习过。
Gison说,“那么告诉我,对于Visitor,如何利用Python的特性?”
“我知道你在想什么。你就是想让我写一个类,然后写一个访问者去访问它,是不是?”
classTreeNode:def__init__(self,data):self . data=dataself . left=nonedefcept(self,visitor):if self . leftsnotnone:self . left . accept(visitor)visitor . visit(self . rights notnone:self . right . accept(visitor)class print visitor:def visitor(self,node):print(node . data)root=treenode( 1 )root . left=treenode( 2 )root . right=treenode( 3 )visitor=print visitor()root .
吉森说:“是啊,访客模型不就是这么说的吗?”
我告诉你,你的Python只学了一点点。Visitor的本质是分离结构和操作,在Python中使用generator可以更优雅地实现。"
class treenode:def _ _ ITER _ _(self):return self。_ _ generator()def _ _ generator(self):ifself . leftsnotnone:yieldfromiter(self . left)yieldfromself . dataifself . rightsnotnone:yieldfromiter(self . right)root=TreeNode( 1 )root . left=TreeNode( 2 )root . right=TreeNode( 3 )fore inroot:print(ele)
不得不承认,这种方法用起来更简单,同时也达到了结构和操作分离的目的。
特使说:“你看,Python支持语言层面的一些模式,所以很多设计模式在我大Python里看起来非常笨拙。我们这里不提倡。当然,我们还是要掌握面向对象设计SOLID的原理和设计模式的思想,发现变化并打包,这样才能写出优雅的程序。”
吉森叹了口气,觉得自己不擅长学习技巧,不再反抗,很容易屈服。
乐章结尾部
Python审判了本该被判死刑的Gison,但Java帝国压力很大,要求释放他,否则就开战。
吉森被送回爪哇王国,成为人们心目中的英雄。回到家,他仔细对比了Java和Python,在Java虚拟机上实现了Python!为了表彰他的英雄事迹,国王称这种语言为Jython。
赞美诗这个故事的灵感来自于这个视频:https://www.youtube.com/watch? v=g5oeyhcjuv 0
如果你能仔细看到这个,说明是码农的铁杆dqyg,会送出5份《Head First 设计模式》,有码农专属印章的签名版(再次感谢读者@Aries的辛苦雕琢)。
只有五本,在微信官方账号回复消息“设计图案抽奖”即可抽奖。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。