Python有设计模式么
3个回答
2022-02-09 · 百度认证:北京一天天教育科技有限公司官方账号,教育领域创作者
关注
展开全部
Python设计模式主要分为三大类:创建型模式、结构型模式、行为型模式;三 大类中又被细分为23种设计模式,以下这几种是最常见的。
单例模式:是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个是实例时,单例对象就能派上用场。单例对象的要点有三个:一是某个类只能有一个实例;二是它必须自行创建整个实例,三是它必须自行向整个系统提供这个实例。
工厂模式:提供一个创建对象的接口,不像客户端暴露创建对象的过程,使用一个公共的接口来创建对象,可以分为三种:简单工厂、工厂方法、抽象工厂。一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模式。
策略模式:是常见的设计模式之一,它是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。换句话来讲,就是针对一个问题而定义出一个解决的模板,这个模板就是具体的策略,每个策略都是按照这个模板进行的,这种情况下我们有新的策略时就可以直接按照模板来写,而不会影响之前已经定义好的策略。
门面模式:门面模式也被称作外观模式。定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式注重统一的对象,也就是提供一个访问子系统的接口。门面模式与模板模式有相似的地方,都是对一些需要重复方法的封装。但本质上是不同的,模板模式是对类本身的方法的封装,其被封装的方法也可以单独使用;门面模式,是对子系统的封装,其被封装的接口理论上是不会被单独提出来使用的。
单例模式:是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个是实例时,单例对象就能派上用场。单例对象的要点有三个:一是某个类只能有一个实例;二是它必须自行创建整个实例,三是它必须自行向整个系统提供这个实例。
工厂模式:提供一个创建对象的接口,不像客户端暴露创建对象的过程,使用一个公共的接口来创建对象,可以分为三种:简单工厂、工厂方法、抽象工厂。一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模式。
策略模式:是常见的设计模式之一,它是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。换句话来讲,就是针对一个问题而定义出一个解决的模板,这个模板就是具体的策略,每个策略都是按照这个模板进行的,这种情况下我们有新的策略时就可以直接按照模板来写,而不会影响之前已经定义好的策略。
门面模式:门面模式也被称作外观模式。定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式注重统一的对象,也就是提供一个访问子系统的接口。门面模式与模板模式有相似的地方,都是对一些需要重复方法的封装。但本质上是不同的,模板模式是对类本身的方法的封装,其被封装的方法也可以单独使用;门面模式,是对子系统的封装,其被封装的接口理论上是不会被单独提出来使用的。
2018-07-05 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
单例模式:Python 的单例模式最好不要借助类(在 Java 中借助类是因为 Java 所有代码都要写在类中),而是通过一个模块来实现。一个模块的模块内全局变量、模块内全局函数,组合起来就是一个单例对象了。
模板方法模式:这个可以像其他语言一样实现,但是如果要遵循鸭子类型原则的话,应该删除公有的抽象父类(或接口),从而追求灵活性。
工厂方法模式、多例模式:这个也不用借助类,直接写一个全局函数作为工厂函数即可。因为 Python 中实例化是通过 call 类来完成的,现在改成 call 工厂函数,对客户抠码者是透明的。(从这点我表示理解 Python 没有 new 操作符的好处了,使用通用的 call 定义,正交性极强)
装饰器模式、代理模式:这个接触过 Python 就不会不知道了,Python 内置的 decorator 语法如此著名。装饰器模式和代理模式都可以通过这种方式完成。另外一种是对对象的装饰或代理,这个也不需要按照契约编程的风格,让代理对象实现被代理对象的抽象。一切动态代理,只需要通过重载属性访问操作符,神马都简单了(和 PHP 通过 __get、__set、__call 来实现动态代理很类似)。
原型模式:这个在 Python 中实现的不是那么爽快,需要调用 copy 来克隆原型对象。但是其实有另一种实现方式:之所以使用原型模式,是因为对象初始化需要较大开销。我们只需要保存初始化的结果,并在产生新对象的时候赋予新对象即可。所以,通过元类控制对象被创建的过程,来实现原型模式,也是一种选择。
模板方法模式:这个可以像其他语言一样实现,但是如果要遵循鸭子类型原则的话,应该删除公有的抽象父类(或接口),从而追求灵活性。
工厂方法模式、多例模式:这个也不用借助类,直接写一个全局函数作为工厂函数即可。因为 Python 中实例化是通过 call 类来完成的,现在改成 call 工厂函数,对客户抠码者是透明的。(从这点我表示理解 Python 没有 new 操作符的好处了,使用通用的 call 定义,正交性极强)
装饰器模式、代理模式:这个接触过 Python 就不会不知道了,Python 内置的 decorator 语法如此著名。装饰器模式和代理模式都可以通过这种方式完成。另外一种是对对象的装饰或代理,这个也不需要按照契约编程的风格,让代理对象实现被代理对象的抽象。一切动态代理,只需要通过重载属性访问操作符,神马都简单了(和 PHP 通过 __get、__set、__call 来实现动态代理很类似)。
原型模式:这个在 Python 中实现的不是那么爽快,需要调用 copy 来克隆原型对象。但是其实有另一种实现方式:之所以使用原型模式,是因为对象初始化需要较大开销。我们只需要保存初始化的结果,并在产生新对象的时候赋予新对象即可。所以,通过元类控制对象被创建的过程,来实现原型模式,也是一种选择。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2017-08-20
展开全部
在众多高大上的自学指导中,尝试做一股清流,把要讲清楚的都讲清楚,除了一堆资料之外,你能在学之前就有一个非常明显的结果倾向。本文以《小白带你学Python》为内容方向,试图在繁杂的信息里,给你找到你学习Python的动力和路径,本文更新于2017年7月21日17:30;========================正文分割线==========================在前文中我们提到:Python岗位有哪些呢?主要的岗位有这些:Python全栈开发工程师(10k-20K)Python运维开发工程师(15k-20K)Python高级开发工程师(15k-30K)Python大数据工程师(15K-30K)Python机器学习工程师(15k-30K)Python架构师(20k-40k)目前应用最多的:全栈开发、数据分析、运维开发,今天我们就以这三个重点的岗位来做一下自学Python的规划,希望你在学之前就能有结果的来走得更远。在这里我们建议大家用知识投资的《道、法、器、术、势》五个工具来完美的执行和落地自学Python,好了,废话不多书,我们来开始:————————第一:道——明确目标其实很多人在学习Python之前很少想这个,因为很多人说:现在Python很火呀,所以我么需要学。这个其实跟你自己没有什么关系,例如:你曾经想做一个网站不会开发,现在可以做了,现在Python很火并且你也要学来找工作,未来Python很火,我具备了Python的技能会不错。在一生中,我们或多或少总会卡到目标上。在一些我们擅长的领域,我们会有明确的目标,并且积极指导别人:亲!干事之前,你要先定目标啊!王健林的小目标,大家在朋友圈也都看过了,他会定先挣它一个亿。第二:法——做好你学习Python的系统规划1.目前市场需求主流的岗位里,你得选择一个其中你目前看来可以学,并且最敢兴趣学习的方向;2.在方向选择好后,对照招聘网站:拉勾、智联、Boss直聘等网站的岗位要求,进行学习内容的统计与大概的记录;3.分模块的计划你学习这个模块的时间和完成的大概目标;4.列出你可能出现的学习误差与为之准备的应对方案;好了,你发现没有,其实任何学习重要的不是有什么资料,核心是如何学,学多久,有没有时间限制,遇到过自己多次学习某个内容或者其他人学习某个内容,最关键的一点是在起步阶段,开始属于激情期,激情在前面释放越多,后面的持续力就很弱,好了这就是关于学习计划。废话说多了,那我们来看看一个普适性的学习Python的流程;1天——下载并安装好学习环境:到www.python.org网站上下载一个python3.0以上的版本。我建议初学者,不要下载具有IDE功能的集成开发环境,比如Eclipse插件等。4周——下载一些python的学习文档,比如《简明Python教程》,《笨法学Python》等等。通过学习语法,掌握python中的关键字语法,函数语法,数学表达式、变量、数据结构、语法等等等1.了解Python是什么,都能做些什么?2.知道什么是变量、算法、解释器3.Python基本数据类型4.列表和元组的操作方法5.字符串操作方法6.基本的字典操作方法7.任何知识它的基础知识都是有些枯燥的,现在我们就可以动手来做一些逻辑层面的东西了。掌握if、else、elif、while、for、continue、break和列表推导式等这些语句的使用,还有程序中的异常处理。2周——看完基础后,就是做一些小项目巩固基础,python具备很好的交互学习模式,对于书本上的例子我们可以通过交互平台进行操练,通过练习加深印象,达到学习掌握的目的。2周——通过以上三个步骤的学习后,我们大致掌握了python的常用方法、关键字用法以及函数语法等。接下去的学习上,我们就可以着手学习常用模块的使用,比如os,os.path,sys,string模块等。我们可以在交互环境中先熟悉使用其中的函数,如果遇到函数的使用上的问题,可以参考python安装后的自带chm帮助文件。2周——为了更好得掌握python,我们的学习不能只是停留在学习一些语法或者api阶段。在此阶段中,我们可以尝试用python解决我们项目中遇到的一些问题,如果项目不是用python开发的,那我们可以想想能不能用python制作一些项目组可以使用的一些工具(utility),通过这些工具简化项目组成员的任务,提高我们的工作效率。如果没有项目,我们也可以自己找些题目来自己练习练习。2周——Python库是Python的精华所在,可以说Python库组成并且造就了Python,Python库是Python开发者的利器,所以学习Python库就显得尤为重要:2周——经过以上锻炼后,我们的python知识水平肯定是越来越高。接下去的学习,我们就要更上一层楼。为了学以致用,真正能应用于项目开发或产品开发,我们还必须学习企业应用开发中必须要掌握的网络和数据库的知识。在此的学习就不光是python语言本身的学习了,如果之前没有学习和掌握很网络和数据库知识,在此阶段我们可以借此机会补习一把。3周——到此阶段,我们已经是真正入门了。在接下去的工作中,就是要快速地通过我们的所学来服务项目了。在此阶段,我们除了掌握python自带的模块外,我们最好在掌握一些业界广泛使用的开源框架,比如twisted、peak、django、xml等。通过熟练使用它们,达到闪电开发,大大节省项目宝贵时间。《Python核心编程》,介绍了Python的一些具体领域的开发方法;《Python网络数据采集》,很简单的爬虫入门书;《利用Python进行数据分析》,介绍了Pandas和NumPy的用法;《FlaskWeb开发》,如何用Flask写一个博客。第三:术——你具体的学习手段1.每天你计划学习多少时间?例如一天必须学2小时,每天坚持;2.每个阶段的计划拖延时间不能高于多少时间?3.如果一个阶段不顺利如何调整?其实很多时候,并不是资料不够多,而是本身的学习思路和计划出现了问题,那么其实最后学习Python的结果会变成:懂得了很多道理,收集了很多资料,依然学不好Python。第四:器——学习的工具和素材在知乎的所有学习的评中,出来最多的就是书、视频、网站一大堆,很多人觉得非常的赞,确实如此,但是回头看,你的网盘里躺着的500G视频,还是没有让你学会Python,我给大家的建议是:少为多,学为多,做为多,完成为多,而不要做伸手党。在主流的学习中,按照学习素材来分,我们分为这几大类:——真人:有人给你准备好素材,过程计划,内容,让后你只要用心学就行,这个就是大家常说的培训,属于懒人成长式。(线下培训班)PS:不做任何推荐——视频:有人把学习的过程录制好,你只要按照要求跟着做就行,出现问题你无法及时找到。(真人视频、代码视频)——书本:有人把学习过程帮你写出来,你只需要跟着书本的过程过就行,然后按照要求学习(实体书籍、电子书)《简明Python教程》《笨法学Python》书籍推荐如下:————————————————————————下面我们推荐6本高分书籍给大家,希望大家学习愉快:1.Python编程:从入门到实践豆瓣评分:8.8内容简介:本书是一本针对所有层次的Python读者而作的Python入门书。全书分两部分:第一部分介绍用Python编程所必须了解的基本概念,包括matplotlib、NumPy和Pygal等强大的Python库和工具介绍,以及列表、字典、if语句、类、文件与异常、代码测试等内容;第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的Python2D游戏开发如何利用数据生成交互式的信息图,以及创建和定制简单的Web应用,并帮读者解决常见编程问题和困惑。豆瓣书友推荐:很好的入门书,简洁全面,适合小白。learningpython之类大砖头太不友好。这本虽然有些地方讲得不深入,但是对新手友好。————————————————2."笨法"学Python豆瓣评分:8.0内容简介:本书是一本Python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。ZedShaw完善了这个堪称世上最好的Python学习系统。只要跟着学习,你就会和迄今为止数十万Zed教过的初学者一样获得成功。这本书会让你的每一分钟投入都有回报。Python是世界上最强大、最受欢迎的编程语言之一,很快你就会成为一名Python程序员。豆瓣书友推荐:花了一周的时间看完,在以前的基础上零零碎碎学了一些新的东西,还算是有所收获,但是前面讲的很基础很简单,到ex40之后突然难度增加不是很懂在讲些什么。————————————————3.Python学习手册豆瓣评分:8.1内容简介:《Python学习手册(第3版)》讲述了:Python可移植、功能强大、易于使用,是编写独立应用程序和脚本应用程序的理想选择。无论你是刚接触编程或者刚接触Python,通过学习《Python学习手册(第3版)》,你可以迅速高效地精通核心Python语言基础。读完《Python学习手册(第3版)》,你会对这门语言有足够的了解,从而可以在你所从事的任何应用领域中使用它。豆瓣书友推荐:用了两周的时间将这本书啃了一下,还有200多页的电子版没看,但还是忍不住先来评论。既是总结自己,也想帮助别人。本书总评:优点:解释详细,例子丰富;关于Python语言本身的讲解全面详尽而又循序渐进不断重复,同时详述语言现象背后的机制和原理;除语言本身,还包含编程实践和设计以及高级主题。缺点:有些厚;翻译不佳;代码练习题很少;————————————————4.Python基础教程豆瓣评分:8.0内容简介:本书是经典教程的全新改版,作者根据Python3.0版本的种种变化,全面改写了书中内容,做到既能“瞻前”也能“顾后”。本书层次鲜明、结构严谨、内容翔实,特别是在最后几章,作者将前面讲述的内容应用到了10个引人入胜的项目中,并以模板的形式介绍了项目的开发过程。本书既适合初学者夯实基础,又能帮助Python程序员提升技能,即使是Python方面的技术专家,也能从书里找到令你耳目一新的东西。豆瓣书友推荐:写得挺生动亲民的,很好的入门书。————————————————5.Python核心编程豆瓣评分:8.0内容简介:学习专业的Python风格、最佳实践和好的编程习惯;·加强对Python对象、内存模型和Python面向对象特性的深入理解;·构建更有效的Web、CGI、互联网、网络和其他客户端/服务器架构应用程序及软件;·学习如何使用Python中的Tkinter和其他工具来开发自己的GUI应用程序及软件;·通过用C等语言编写扩展来提升Python应用程序的性能,或者通过使用多线程增强I/0相关的应用程序的能力;·学习Python中有关数据库的API,以及如何在Python中使用各种不同的数据库系统,包括MySQL、Postgres和SQLite。豆瓣书友推荐:了解Python语言方方面面的不错选择,虽然版本有些旧,对于较晚接触Py的人来说,一个“副作用”是可以地了解Py的过去。————————————————6.流畅的Python豆瓣评分:9.5内容简介:本书由奋战在Python开发一线近20年的LucianoRamalho执笔,VictorStinner、AlexMartelli等Python大咖担纲技术审稿人,从语言设计层面剖析编程细节,兼顾Python3和Python2,告诉你Python中不亲自动手实践就无法理解的语言陷阱成因和解决之道,教你写出风格地道的Python代码。豆瓣书友推荐:非常好的python进阶书,翻译的也不错,基本上没有错误。协程和元编程死了一堆脑细胞。之前也看了不少文章宣传py3,但看完这本才最终决定迁到py3。——————————————新闻:关于学习的碎片化的咨询和知识,来用于你的个人成长( 、知乎、咨询流)第五:势——学习的心态和状态1.任何一个学习的过程,看起来很爽,但是做起来就未必了,老掉牙的坚持是必备的。2.教程选择一到两个就OK了,不要求多;3.多写代码,尽量让代码撸爽你;4.尽量多出错;————————————最后给大家贡献个一月学会Python基础开发的训练计划:时间分为4周,全部自学,仅提供大纲,适用于Web方向:1、第一周:读完《笨法学Python》;2、第二周:写个爬虫,需要深入了解re、sqlite3、Queue等几个模块,做个简单爬取;3、第三周:学习一种Web开发框架,推荐Flask、webpy、Django之类的,学个数据库,写个简单的web应用如博客;4、第四周:给博客做个小功能并走完测试和服务器上架;————————以上为关于如何自学的一个流程,希望大家拍砖!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询