继承:

#继承
#什么时候用继承?
# 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. BZOJ2008 JSOI2010连通数(floyd+bitset)

    一直不明白为什么要用floyd求传递闭包,直接搜不是更快嘛……不过其实可以用bitset优化,方法也比较显然.bitset是真的神奇啊,好多01状态且转移相似的东西都可以用这个优化一下. #inclu ...

  2. Caused by: org.xml.sax.SAXParseException; lineNumber: 1

    百分百是你的MYBATIS 的xml 里面的 xml节点没写对,或者忘记关闭,或者格式不对

  3. MT【27】对数方程组求范围

    解答:3 评论:此类题目通性通法为换元后化归为线性规划问题.当然不等式凑配也是常见技巧,只是容易范围扩大或者缩小.

  4. typescript泛型(学习笔记非干货)

    软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性. 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型, 这在创建大型系统时为你提供了十分灵活的功能. In softwa ...

  5. 拦截器的使用,配置手机浏览器访问的h5页面

    package com.thinkgem.jeesite.modules.sys.interceptor; import javax.servlet.http.HttpServletRequest; ...

  6. 1.C和C++的区别

    C和C++的区别  C语言语法简单,但使用不易  C++语法非常庞大复杂,但使用方便,更注重的是它的编程思想(面向对象). 一.第一个C++程序  1.文件扩展名   C++源文件扩展名 .cpp,C ...

  7. (reverse)Palindromes hdu2163

    Palindromes 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2163 (此题是为了对于JAVA温故知新的) Problem Description ...

  8. php框架:Flight 简介

    Flight是一个php的极简的有着微内核的框架,能过快速的构建RESTful的应用 官网地址: http://flightphp.com/ github地址:https://github.com/m ...

  9. Jenkins插件获取git分支的方法

    1.旧版本的Jenkins可以使用Dynamic Choice Parameter插件: 使用方法: Jenkins--->dev-h5-server--->配置--->参数化构建过 ...

  10. ElasticSearch 之 dis_max tie_break的应用

    1. 插入数据 PUT /my_index/my_type/ { "title": "Quick brown rabbits", "body" ...