继承:

#继承
#什么时候用继承?
# 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类 (四) 三大特性之一 :继承的更多相关文章

  1. Python面向对象之:三大特性:继承,封装,多态以及类的约束

    前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情 ...

  2. 浅谈python的对象的三大特性之继承

    前面我们定义了人的类,并用这个类实例化出两个人jack和lily,查看了它们的内存空间. 现在我们再来看看类中所存在的对向对象编程的三大特性之继承的一些特性. 前面定义了一个人的类,可是我们还知道,人 ...

  3. python基础(24):面向对象三大特性一(继承)

    1. 继承 1.1 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继 ...

  4. python学习 day23 面向对象三大特性之继承

    ### 面向对象三大特性值继承#### 1.什么是继承 继承是一种关系,必须存在两个对象才可能产生这种关系,在现实生活中的继承,王思聪可以继承王健林的财产 被继承的成为父,继承的一方成为子 在程序中, ...

  5. python - class类 (七) 三大特性 - 封装 结尾

    封装: # 封装 #第一层,类就是麻袋,本身就是一种封装 #第二层,类中定义私有的,至在类的内部使用,外部无法访问 #第三层,封装在于明确区分内外,使得类实现者可以修改封装内的东西二不影响外部调用者 ...

  6. python - class类 (六) 三大特性 - 多态

    多态的概念: # 多态的概念 # 指出了对象如何通过他们共同的属性和动作来操作及访问而不需考虑他们的具体的类 # 多态表明了动态绑定的存在,允许重载及运行时类型确定和验证. # 示例模拟: #水具有多 ...

  7. (转载)OC学习篇之---类的三大特性:封装,继承,多态

    之前的一片文章介绍了OC中类的初始化方法和点语法的使用,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今 ...

  8. 转 OC温故:类的三大特性(封装,继承,多态)

    原文标题:OC学习篇之---类的三大特性(封装,继承,多态) 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性 ...

  9. OC学习篇之---类的三大特性(封装,继承,多态)

    之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习 ...

随机推荐

  1. GitHub && GitLab

    1.github介绍 Git作为一个开源的分布式版本控制系统,已经被越来越多的人使用,随之需要的就是需要有个专门的地方存储.管理通过Git上传的项目,这就是gitHub gitHub是一个面向开源及私 ...

  2. BZOJ2631tree——LCT

    题目描述 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一:+ u v c:将u到v的路径上的点的权值都加上自然数c:- u1 v1 u2 v2:将树中原有的边( ...

  3. BZOJ1827[USACO 2010 Mar Gold 1.Great Cow Gathering]——树形DP

    题目描述 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,000) 个农场 ...

  4. JS通过键盘点击事件实现div移动

    页面内容:文本框模拟键盘点击   div元素实现移动: <body> <textarea id="myarea"></textarea> < ...

  5. Android 屏幕操作

    1 全屏显示Activity 代码 : 方法一:编程实现 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, Window ...

  6. SharePoint “File not found” 错误

    Troubleshooting the SharePoint "File not found" Error Have you ever come across a "Fi ...

  7. 移动端利用-webkit-box水平垂直居中

    首先,必须要在父元素上用display:-webkit-box. 一.box的属性: 1.box-orient 用于父元素,用来确定父容器里子容器的排列方式,是水平还是垂直. horizontal在水 ...

  8. (HDU 1542) Atlantis 矩形面积并——扫描线

    n个矩形,可以重叠,求面积并. n<=100: 暴力模拟扫描线.模拟赛大水题.(n^2) 甚至网上一种“分块”:分成n^2块,每一块看是否属于一个矩形. 甚至这个题就可以这么做. n<=1 ...

  9. 查询字符串(性能对比): Array Vs HashMap

    ip字符串长度: 15 ip count: 25 time - array:16ms, 查询次数:25000time - map:15ms, 查询次数:25000 ip count: 42 time ...

  10. array扩展运算符

    扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) // 1 2 3 console ...