python - class类 (四) 三大特性之一 :继承
继承:
#继承
#什么时候用继承?
# 1.当类之间有显著的不同,并且较小的类是较大的类的所需的组建时,用组合比较好.
# 2.当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 # 单继承
class A():
M = 10000
def __init__(self,name):
self.name = name
def AA(self):
print("AA") class B(A):
pass class C(A):
M = 999999 #在dict属性字典里,B是没有父类A 的属性的.
print(A.__dict__)
print(B.__dict__) #实例化后,B继承了A的类属性以及函数属性
abc = B('anec')
print(abc.name)
print(abc.M)
print(abc.AA) #在C类中定义了M属性,所以访问M属性时,首先会从C类找M属性.
#C类中新增M属性与父类相同,并不覆盖父类的M属性
abc = C("abc")
print(abc.name)
print(abc.M)
print(A.M)
print(abc.AA) # 继承循序:
# python的类继承可以继承多个类,java和C#中则只能继承一个类
# python的类如果继承了多个类,那么其寻找方法的方式有两种:
# 深度优先
# 广度优先
#
# 当类是经典类时,多继承情况下,会按照深度优先方式查找
# 当类是新式类时,多继承情况下,会按照广度优先方式查找
#
# 经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了更多的功能,也就是之后推荐的写法,
# 从写法上区分的类或者父类继承了object类,那么该类便是新式类,否则就是经典类. # 继承核心:
#python 如何实现继承的,对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)列表
#这个MRO列表就是一个简单的所有基类的线性顺序列表 #为了实现继承python会在MRO列表上从左到右开始查找基类,直到找到第一个匹配这个属性的类为止.
# 而这个MRO列表的构造是通过一个C3线性算法来实现的.我们不去深究这个算法的数据原理
# 实际上就是合并所有父类的MRO列表并遵循如下三条准则
# 1.子类会优先于父类被检查
# 2.多个父类会根据他们在列表中的顺讯被检查
# 3.如果对下一个类存在两个合法的选择,选择第一个父类 # 新式类
#python3 以后都是新式类继承
class A(object):
def test(self):
print('A')
class B(A):
def test(self):
print('B')
class C(A):
def test(self):
print('C')
class D(B):
def test(self):
print('D')
class E(C):
def test(self):
print('E')
class F(D,E):
def test(self):
print('F') #查看继承规则:(新式类才有的方法)
print(F.mro())
#[<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
# 新式类继承顺序:(先将一侧的类查询至基类之前一个类,再查询另一边类至基类)
# F-D-B-E-C-A-object # 而经典类经常顺序为:(先将一侧的类查询完毕再查询第二类)
# F-D-B-A-E-C
python - class类 (四) 三大特性之一 :继承的更多相关文章
- Python面向对象之:三大特性:继承,封装,多态以及类的约束
前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情 ...
- 浅谈python的对象的三大特性之继承
前面我们定义了人的类,并用这个类实例化出两个人jack和lily,查看了它们的内存空间. 现在我们再来看看类中所存在的对向对象编程的三大特性之继承的一些特性. 前面定义了一个人的类,可是我们还知道,人 ...
- python基础(24):面向对象三大特性一(继承)
1. 继承 1.1 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继 ...
- python学习 day23 面向对象三大特性之继承
### 面向对象三大特性值继承#### 1.什么是继承 继承是一种关系,必须存在两个对象才可能产生这种关系,在现实生活中的继承,王思聪可以继承王健林的财产 被继承的成为父,继承的一方成为子 在程序中, ...
- python - class类 (七) 三大特性 - 封装 结尾
封装: # 封装 #第一层,类就是麻袋,本身就是一种封装 #第二层,类中定义私有的,至在类的内部使用,外部无法访问 #第三层,封装在于明确区分内外,使得类实现者可以修改封装内的东西二不影响外部调用者 ...
- python - class类 (六) 三大特性 - 多态
多态的概念: # 多态的概念 # 指出了对象如何通过他们共同的属性和动作来操作及访问而不需考虑他们的具体的类 # 多态表明了动态绑定的存在,允许重载及运行时类型确定和验证. # 示例模拟: #水具有多 ...
- (转载)OC学习篇之---类的三大特性:封装,继承,多态
之前的一片文章介绍了OC中类的初始化方法和点语法的使用,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今 ...
- 转 OC温故:类的三大特性(封装,继承,多态)
原文标题:OC学习篇之---类的三大特性(封装,继承,多态) 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性 ...
- OC学习篇之---类的三大特性(封装,继承,多态)
之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习 ...
随机推荐
- Codeforces Round #420 (Div. 2) A,B,C
A. Okabe and Future Gadget Laboratory time limit per test 2 seconds memory limit per test 256 megaby ...
- cf1063B Labyrinth (bfs)
可以证明,如果我搜索的话,一个点最多只有两个最优状态:向左剩余步数最大时和向右剩余步数最大时 然后判一判,bfs就好了 dfs会T惨... #include<bits/stdc++.h> ...
- Windows下禁用锁屏热键WinKey+L
在注册表[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]中创建名字为DisableLockWo ...
- 【UR #17】滑稽树前做游戏
假装看懂的样子 假装会做的样子 UOJ Round #17 题解 加上一个(t-w)^c,c是和i相连的点的度数 是一个多项式的话可以归纳证明 一些具体实现: 多项式存储,保留t,y, f=ai*t^ ...
- [NOI2015]寿司晚宴——状压dp
题目转化:将2~n的数分成两组,可以不选,使得这两组没有公共的质因子.求方案数. 选择了一个数,相当于选择了它的所有质因子. 30分: 发现,n<=30的时候,涉及到的质因子也就10个.2,3, ...
- 图片缓存:浏览器刷新 和 304 Not Modified 与 If-Modified-Since 及 Cache-Control
关键词:浏览器刷新,304 Not Modified ,If-Modified-Since,Cache-Control,Expires 今天在用chrome浏览淘宝页面的时候,发现很多来自淘宝图片HT ...
- Java:读取系统信息
com.sun.management.OperatingSystemMXBean mxbean = (com.sun.management.OperatingSystemMXBean) Managem ...
- 平台加载面板的方法$.loadPml
$.loadPml({ paneId:"", paneName:"", loadUrl:"/"+globalURL+"/mvcco ...
- sqlserver 导入数据出现 无法创建 OLE DB 取值函数。请查看列元数据是否有效
我用的是Sql Server 的导入导出功能来实现的,但是有些数据可以导进去,有些就不行.总是出现一些错误! 执行之前 (错误)消息错误 0xc0202005: 数据流任务: 在数据源中找不到列“Un ...
- python高级数据可视化Dash2
k 线国内版 python dash 的应用首页,是用一个 k 线图来做 damo 的,奈何数据源用的 Google,上不去.当然,可以换 yahoo,但是毕竟国内的还是更亲切些. 官方的 demo ...