本节内容

1、概述

2、类的多继承

3、经典类VS新式类

4、总结

一、概述

 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类,下面我就来学学什么是多继承,什么是经典类和新式类?

二、类的多继承

2.1 多继承

说明:之前我们都是讲的单继承,那么什么是多继承呢?说白了,就是:子类可以继承多个父类,就叫多继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class SchoolMember(object):  #SchoolMember类
    '''学校成员基类'''
    def tell(self):
        print("the schoolmeber is tell...")
class School(object):     #School类
    """学校类"""
    def open_branch(self,addr):
        print("openning a new branch in",addr)
class Teacher(SchoolMember,School):   #子类Teacher同时继承了SchoolMember,School两个类
    "讲师类"
    def teaching(self):
        "讲课方法"
        print("Teacher xiaogao is teaching python")
t1 = Teacher()
t1.tell()   #拥有父类SchoolMember的tell方法
t1.open_branch("shanghai")  #拥有父类School的open_branch方法

三、经典类VS新式类

3.1、新式类

1、概念

新式类定义时必须继承object类,被定义继承了object类的,就叫做新式类

1
2
class Person(object):  #继承object类
    "新式类"

2、继承构造方法

新式类初始化构造方法用super关键字去继承

1
super(子类,self).__init__(name,age)

3、调用父类中相同方法或者相同属性的顺序

新式类多继承的调用方法是顺序是:广度优先查询,如下图:

代码实验如下:

①全部代码

 class A(object):  #新式类def __init__(self):self.n = "A"class B(A):def __init__(self):self.n = "B"class C(A):def __init__(self):self.n = "C"class D(B,C):def __init__(self):self.n = "D"d = D()print(d.n)#输出D

没有问题,先找自己的属性,输出D

②注释D类中代码

 class A(object):def __init__(self):self.n = "A"class B(A):def __init__(self):self.n = "B"class C(A):def __init__(self):self.n = "C"class D(B,C):passd = D()print(d.n)#输出B

③注释B类中的代码

 class A(object):def __init__(self):self.n = "A"class B(A):passclass C(A):def __init__(self):self.n = "C"class D(B,C):passd = D()print(d.n)#输出C

④注释C类中的代码

 class A(object):def __init__(self):self.n = "A"class B(A):passclass C(A):passclass D(B,C):passd = D()print(d.n)#输出A 

3.2 经典类

1、概念

经典类定义,什么都不继承

1
2
class Person:
    "经典类"

2、继承构造方法

1
父类.__init(self,name,age)

3、调用父类中相同方法或者相同属性的顺序

经典类多继承的调用方法是顺序是:深度优先查询,如下图:

代码实验如下:

①全部代码

class A:#经典类def __init__(self):self.n = "A"class B(A):passdef __init__(self):self.n = "B"class C(A):def __init__(self):self.n = "C"class D(B,C):def __init__(self):self.n = "D"d = D()
print(d.n)#输出
D

②注释D类中代码

class A:def __init__(self):self.n = "A"class B(A):def __init__(self):self.n = "B"class C(A):def __init__(self):self.n = "C"class D(B,C):passd = D()
print(d.n)#输出
B

③注释B类中的代码

class A:def __init__(self):self.n = "A"class B(A):passclass C(A):def __init__(self):self.n = "C"class D(B,C):passd = D()
print(d.n)#输出
A

④注释A类中的代码

class A:passclass B(A):passclass C(A):def __init__(self):self.n = "C"class D(B,C):passd = D()
print(d.n)#输出
C

四、总结

  1. 新式类继承object类,经典类不继承任何类
  2. 新式类用super关键字继承构造方法,经典类用 父类.__init(self)来继承
  3. 新式类:广度优先查询,经典类:深度优先查询(因为新式类讲究的是新,所以要找最近的,最新的;然后经典的讲究古老,所以更远更深的)
  4. 值得注意的是,我们上面是在python2中做的,在python3中不管是经典类还是新式类,都是采用的是广度优先查询,已经废弃2中的深度查询了

转载于:https://www.cnblogs.com/luoahong/p/9895376.html

面向对象【day07】:新式类和经典类(八)相关推荐

  1. python新式类和经典类区别_Python中新式类和经典类的区别,钻石继承

    1)首先,写法不一样: class A: pass class B(object): 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索. 3)新式类更符合OOP编程思想,统一了pyt ...

  2. python中的__new__与__init__,新式类和经典类(2.x)

    在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1 ...

  3. 新式类和经典类的区别类的特殊方法单例模式

    目录: 新式类和经典类的区别 重写特殊的构造方法 类的特殊方法 单例模式原理及作用 新式类和经典类的区别: 1)首先,写法不一样: class A: #经典类写法passclass B(object) ...

  4. python中新式类和经典类

    python中的类分为新式类和经典类,具体有什么区别呢?简单的说, 1.新式类都从object继承,经典类不需要. Python 2.x中默认都是经典类,只有显式继承了object才是新式类 Pyth ...

  5. python新式类和经典类的区别?

    在python里凡是继承了object的类,都是新式类. Python2里面继承object的是新式类,没有写父类的是经典类. Python3里只有新式类. 经典类目前在Python里基本没有应用,多 ...

  6. Python 新式类与经典类

    新式类,经典类 查询匹配 广度查询 横着对每个类进行查询 深度查询 无视平级类,直接寻找下级类 #python 3.0 #新式类 广度查询 #经典类 广度查询 #python 2.0 #新式类 广度查 ...

  7. Python 中的新式类和经典类的区别?

    1. 版本支持 / 写法差异# 在Python 2.x 中 如果你至今使用的还是 Python 2.x,那么你需要了解一下,在Python 2.x中存在着两种类:经典类和新式类. 什么是经典类? Co ...

  8. python单例模式控制成只初始化一次,常规型的python单例模式在新式类和经典类中的区别。...

    单例模式的写法非常多,但常规型的单例模式就是这样写的,各种代码可能略有差异,但核心就是要搞清楚类属性 实例属性,就很容易写出来,原理完全一模一样. 如下: 源码: class A(object):de ...

  9. 2021年了你还不了解新式类与经典类?

    "新式类" 与 "经典类" 我们所接触到的类,都是 "新式类"( new-style classes ).同时,在 Python 2.X 相 ...

最新文章

  1. ssh暴力破解解决方案
  2. 利用SQL建立数据库对象
  3. h2 mysql 差别_h2内存数据库和mysql数据库的区别
  4. DCMTK:列出DICOM结构化报告文件的内容
  5. easyui增删改查前段代码
  6. 利用MyBatis的动态SQL特性抽象统一SQL查询接口
  7. java HashMap的keyset方法
  8. linux系统中自动生成snap文件_在Linux操作系统下自动生成Makefile的方法
  9. windows连接linux服务器并后台运行python脚本
  10. 常用ColorMatrixFilter收集
  11. 使用Jasypt加密spring boot应用配置文件的敏感信息
  12. 荒野行动为什么不能获取服务器信息,荒野行动获取服务器信息一直不动 服务器信息0解决方法...
  13. cisco 防火墙安全策略
  14. ubuntu系统打不开网易云音乐解决办法。
  15. android串口开发!一年后斩获腾讯T3,附面试题答案
  16. node文件系统 常用文件处理方法
  17. git 在往云端push代码时候报错detached head
  18. 8.Python之文件
  19. 找工作面试_求职面试和获得Web开发工作的提示
  20. MS的.net讲座下载地址

热门文章

  1. 雷达的正交波形设计matlab源码,雷达系统设计MATLAB仿真
  2. linux6 rac 11g,oracle linux 6.操作系统oracle 11g rac
  3. mysql和oracle用户管理_五种Oracle用户的授权与管理
  4. taskkill 命令:
  5. redis允许其他机器远程连接
  6. swagger访问开关配置
  7. qt 发送数据到http
  8. Swift 面向协议编程的那些事
  9. 考研笔记-物理层协议
  10. 集群节点列表编辑程序