python继承

基于python的设计模式之创建型模型

廉价感情. 提交于 2020-03-13 11:07:53
设计模式(GOF): 每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计 设计模式四个基本要素:模式名称、问题、解决方法、效果 设计模式前戏: 对象/类 封装、继承、多态 接口:一个特殊的类,声明了若干方法,要求继承该接口的类必须实现这些方法 作用:限制继承接口的类的方法的名称及调用方式;隐藏了类的内部实现 接口就是一种抽象的基类(父类),限制继承它的类必须实现接口中定义的某些方法 Python中接口的两种写法 1 class Interface: 2 def method(self,arg): 3 raise NotImplementedError 4 5 #抽象类不可以实例化 6 from abc import abstractmethod,ABCMeta 7 class Interface(metaclass=ABCMeta): 8 @abstractmethod 9 def method(self,arg): 10 pass 设计模式六大原则 开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。 里氏(Liskov)替换原则:所有引用基类(父类)的方法必须能透明地使用其子类的对象。 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象

python object类

只愿长相守 提交于 2020-03-12 08:15:40
object是python的默认类,有很多的方法,python中默认的list,str,dict等等都是继承了object类的方法 继承了object的类属于新式类 ,没有继承属于经典类 在python3种默认都是新式类,也即是所有的自定义类,基类都会继承object类 在python3.x的所有类都是object的子类,所以对于一些内置的方法会写在object类中,如果子类不定义,在调用的时候最终会调用object类中的方法,就不会让程序出现不必要的错误了,__init__方法就是其中的一个例子; 所有继承了object类的类 ---- 新式类 在python2中 不继承object类的都是 经典类 class A ( object ) : pass # 新式类 class A : pass # 经典类 :在多继承中遵循深度优先 # 经典类中没有super和mro方法 所有的py3中 的类都继承object 是新式类,在继承中 遵循 广度优先的 C3算法,也可以使用mro来查看继承顺序,super这个方法 可以帮助我们查找到mro顺序中的下一个类 来源: CSDN 作者: 伶优 链接: https://blog.csdn.net/ilufam1314/article/details/104802556

Python类

江枫思渺然 提交于 2020-03-11 08:20:01
一、面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想。在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一个功能。举个例子,你要做饭,可以用电磁炉,也可以用煤气灶。不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,两种最重要的编程范式分别是面向过程编程和面向对象编程。 提到面向对象,就不得不提到另一种编程思想,面向过程;什么是面向过程呢,面向过程的思想是把一个项目、一件事情按照一定的顺序,从头到尾一步一步地做下去,先做什么,后做什么,一直到结束。这种思想比较好理解,其实这也是一个人做事的方法,我们之前编程的思想也都是使用这种思想。这种编程思想,只要前面有一个步骤变了,那么后面的就也要变,后面维护起来比较麻烦,这样的编程思想,我们在写一些简单的小程序、只执行一次的脚本时可以使用。而面向对象呢,面向对象的思想是把一个项目、一件事情分成更小的项目,或者说分成一个个更小的部分,每一部分负责什么方面的功能,最后再由这些部分组合而成为一个整体。这种思想比较适合多人的分工合作,就像一个大的机关,分各个部门,每个部门分别负责某样职能,各个部门可以充分发挥自己的特色,只要符合一定前提就行了。 举个例子:比如刚才说的一个大的机关,要做某一个项目,从面向过程的思想来说,应该是这样分析的

请解释python面向对象中的继承

£可爱£侵袭症+ 提交于 2020-03-09 17:23:13
解释继承 一个类继承自另一个类,也可以说是一个孩子类/派生类/子类,继承自父类/基类/超类,同时获取所有的类成员(属性和方法)。 继承使我们可以重用代码,并且还可以更方便地创建和维护代码。Python 支持以下类型的继承: 1. 单继承- 一个子类类继承自单个基类 2. 多重继承- 一个子类继承自多个基类 3. 多级继承- 一个子类继承自一个基类,而基类继承自另一个基类 4. 分层继承- 多个子类继承自同一个基类 5. 混合继承- 两种或两种以上继承类型的组合 什么是 Flask? Flask 是一个使用 Python 编写的轻量级 Web 应用框架,使用 BSD 授权。其 WSGI 工具箱采用 Werkzeug,模板引擎则使用 Jinja2。除了 Werkzeug 和 Jinja2 以外几乎不依赖任何外部库。因为 Flask 被称为轻量级框架。 Flask 的会话会话使用签名 cookie 来允许用户查看和修改会话内容。它会记录从一个请求到另一个请求的信息。但如果要修改会话,则必须有密钥 Flask.secret_key。 本文首发于 Python黑洞网 ,博客园同步跟新 来源: https://www.cnblogs.com/pythonzhilian/p/12449276.html

Python基础知识点总结【面试必过】

时光总嘲笑我的痴心妄想 提交于 2020-03-09 15:01:37
数据类型: 数字类型(int、float、bool(True or False)、complex) 字符串(str) —— ' ' or " " 相关操作:通过下标获取内容,对字符串进行多步操作前一般需要进行切片[:],保证原字符串不会随着操作变化。(注意:起始坐标和结束坐标都看省略,步进根据自己的需要与否决定是否设置,有时候很简单的解决某些问题) 注意:很多人学Python过程中会遇到各种烦恼问题,没有人帮答疑容易放弃。为此小编建了个Python全栈免费答疑.裙 :七衣衣九起起巴而五(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新Python教程项目可拿,,一起相互监督共同进步! 常用方法: capitalize 使指定字符串首字母大写 center(width, fillchar) 将原字符串变成指定的长度并且内容居中,剩下的部分使用指定的字符填充 rjust(width, fillchar) 将原字符串变成指定的长度并且内容右对齐,剩下的部分使用指定的字符填充 字符串1.join(字符串2) 在字符串2中的每个字符之间插入一个字符串1 列表(list)—— [1,2,3] 相关操作:列表的操作与字符串的操作基本相同,不过需要注意的是字符串的操作对象是单个字符,列表的操作对象是列表中的元素。 常用方法: append 在列表的末尾添加一个元素 insert

python 面向对象练习题

时间秒杀一切 提交于 2020-03-09 14:59:52
1,面向对象三大特性,各有什么用处,说说你的理解。 继承:解决代码重用问题 多态:多态性,可以在不考虑对象类型的情况下而直接使用对象 封装:明确的区分内外,控制外部对隐藏属性的操作行为,隔离复杂度 2,类的属性和对象的属性有什么区别? 类的属性:数据属性和函数属性,数据属性是所有对象共有的,函数属性是绑定对象使用的 对象的属性:对象是类的实例化 3,面向过程编程与面向对象编程的区别与应用场景? 面向过程:复杂的问题流程化,简单化 应用场景:不再需要扩展了,监测脚本,自动部署脚本,软件解压安装 面向对象:特征与技能的结合体 一切皆对象 应用场景:用户需求经常变化,互联网应用,游戏,企业内部应用 4,类和对象在内存中是如何保存的。 类和对象的属性:以字典的形式保存的 5,什么是绑定到对象的方法、绑定到类的方法、解除绑定的函数、如何定义,如何调用,给谁用?有什么特性 绑定到对象的方法:就应该由对象来调用,def tell_info(self):...obj.tell_info() 绑定到类的方法:就应该由类来调用,@classmethod def from_conf(cls):... class.from_conf() 非绑定方法:不与类或对象绑定,谁都可以调用,@staticmethod def create_id():... obj.create_if()/class.create

python面向对象进阶之元类metaclass

柔情痞子 提交于 2020-03-09 12:17:15
一:知识储备 exec exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域(字典形式),如果不指定,默认为globals() 参数三:局部作用域(字典形式),如果不指定,默认为locals() exec的应用: #可以把exec命令的执行当成是一个函数的执行,会将执行期间产生的名字存放于局部名称空间中 g={ 'x':1, 'y':2 } l={} exec(''' global x,z x=100 z=200 m=300 ''',g,l) print(g) #{'x': 100, 'y': 2,'z':200,......} print(l) #{'m': 300} __call__方法:对象后面加括号,触发执行。 注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()() class Foo: def __init__(self): pass def __call__(self, *args, **kwargs): print('__call__') obj = Foo() # 执行 __init__ obj() # 执行 __call__ __call__的应用: # 知识储备__call__方法 class Foo: def __call__(self, *args

《Fluent Python》- 03 字典和集合

帅比萌擦擦* 提交于 2020-03-09 11:54:23
字典这个数据结构活跃在所以Python程序背后,即便你没有直接用到它 泛映射类型 非抽象映射类型通常是不会继承抽象基类的。它们会直接对dict或者是collection.UserDict进行扩展。而抽象基类通常的作用是形式化的文档,它们还可以跟isinstance一起被用来判断某个数据是不是广义上的映射类型。 这里用isintance而不是type来检查,是因为这个参数有可能不是dict。 my_dict = {} print(isinstance(my_dict, abc.Mapping)) # True 标准库里的所有映射都是利用dict来实现的,英雌有个限制,只有可散列的数据类型才能用作这些映射里的键。 关于可散列:如果一个对象是可散列的,那么在这个对象的生命周期中,它的散列值是不变的,而且这个对象需要实现__hash__()方法。另外可散列对象还要有__eq__()方法,这样才能和其他键做比较。 关于Python中“Python里所有的不可变类型都是可散列的”这句话其实是不太准确的,比方说元祖,它本身是不可变的,但是内部元素却可能是可变的。 字典推导 自Python2.7以来,列表推导和生成器表达式的概念就移植到了字典上,从而有了字典推导。字典推导可以从任何以建值对作为元素的可迭代对象中构建出字典。 DIAL_CODES = [(86, 'China'), (91,

python3 mro

十年热恋 提交于 2020-03-09 10:58:13
我们知道, Python 类是支持(多)继承的,一个类的方法和属性可能定义在当前类,也可能定义在基类。针对这种情况,当调用类方法或类属性时,就需要对当前类以及它的基类进行搜索,以确定方法或属性的位置,而搜索的顺序就称为方法解析顺序。 方法解析顺序(Method Resolution Order),简称 MRO。对于只支持单继承的编程语言来说,MRO 很简单,就是从当前类开始,逐个搜索它的父类;而对于 Python,它支持多继承,MRO 相对会复杂一些。 实际上,Python 发展至今,经历了以下 3 种 MRO 算法,分别是: 从左往右,采用深度优先搜索(DFS)的算法,称为旧式类的 MRO; 自 Python 2.2 版本开始,新式类在采用深度优先搜索算法的基础上,对其做了优化; 自 Python 2.3 版本,对新式类采用了 C3 算法。由于 Python 3.x 仅支持新式类,所以该版本只使用 C3 算法。 有关旧式类和新式类的讲解,可阅读《 Python super()使用注意事项 》一文。 有读者可能会好奇,为什么 MRO 弃用了前两种算法,而选择最终的 C3 算法呢?原因很简单,前 2 种算法都存在一定的问题。 旧式类MRO算法 在使用旧式类的 MRO 算法时,以下面代码为例(程序一): class A : def method (self ): print (

python学习笔记(七):面向对象编程、类

不羁的心 提交于 2020-03-09 09:28:27
一、面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想。在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一个功能。举个例子,你要做饭,可以用电磁炉,也可以用煤气灶。不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,两种最重要的编程范式分别是面向过程编程和面向对象编程。 提到面向对象,就不得不提到另一种编程思想,面向过程;什么是面向过程呢,面向过程的思想是把一个项目、一件事情按照一定的顺序,从头到尾一步一步地做下去,先做什么,后做什么,一直到结束。这种思想比较好理解,其实这也是一个人做事的方法,我们之前编程的思想也都是使用这种思想。这种编程思想,只要前面有一个步骤变了,那么后面的就也要变,后面维护起来比较麻烦,这样的编程思想,我们在写一些简单的小程序、只执行一次的脚本时可以使用。而面向对象呢,面向对象的思想是把一个项目、一件事情分成更小的项目,或者说分成一个个更小的部分,每一部分负责什么方面的功能,最后再由这些部分组合而成为一个整体。这种思想比较适合多人的分工合作,就像一个大的机关,分各个部门,每个部门分别负责某样职能,各个部门可以充分发挥自己的特色,只要符合一定前提就行了。 举个例子:比如刚才说的一个大的机关,要做某一个项目,从面向过程的思想来说,应该是这样分析的