面向对象【day07】:新式类和经典类(八)
本节内容
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
四、总结
- 新式类继承object类,经典类不继承任何类
- 新式类用super关键字继承构造方法,经典类用 父类.__init(self)来继承
- 新式类:广度优先查询,经典类:深度优先查询(因为新式类讲究的是新,所以要找最近的,最新的;然后经典的讲究古老,所以更远更深的)
- 值得注意的是,我们上面是在python2中做的,在python3中不管是经典类还是新式类,都是采用的是广度优先查询,已经废弃2中的深度查询了
转载于:https://www.cnblogs.com/luoahong/p/9895376.html
面向对象【day07】:新式类和经典类(八)相关推荐
- python新式类和经典类区别_Python中新式类和经典类的区别,钻石继承
1)首先,写法不一样: class A: pass class B(object): 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索. 3)新式类更符合OOP编程思想,统一了pyt ...
- python中的__new__与__init__,新式类和经典类(2.x)
在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1 ...
- 新式类和经典类的区别类的特殊方法单例模式
目录: 新式类和经典类的区别 重写特殊的构造方法 类的特殊方法 单例模式原理及作用 新式类和经典类的区别: 1)首先,写法不一样: class A: #经典类写法passclass B(object) ...
- python中新式类和经典类
python中的类分为新式类和经典类,具体有什么区别呢?简单的说, 1.新式类都从object继承,经典类不需要. Python 2.x中默认都是经典类,只有显式继承了object才是新式类 Pyth ...
- python新式类和经典类的区别?
在python里凡是继承了object的类,都是新式类. Python2里面继承object的是新式类,没有写父类的是经典类. Python3里只有新式类. 经典类目前在Python里基本没有应用,多 ...
- Python 新式类与经典类
新式类,经典类 查询匹配 广度查询 横着对每个类进行查询 深度查询 无视平级类,直接寻找下级类 #python 3.0 #新式类 广度查询 #经典类 广度查询 #python 2.0 #新式类 广度查 ...
- Python 中的新式类和经典类的区别?
1. 版本支持 / 写法差异# 在Python 2.x 中 如果你至今使用的还是 Python 2.x,那么你需要了解一下,在Python 2.x中存在着两种类:经典类和新式类. 什么是经典类? Co ...
- python单例模式控制成只初始化一次,常规型的python单例模式在新式类和经典类中的区别。...
单例模式的写法非常多,但常规型的单例模式就是这样写的,各种代码可能略有差异,但核心就是要搞清楚类属性 实例属性,就很容易写出来,原理完全一模一样. 如下: 源码: class A(object):de ...
- 2021年了你还不了解新式类与经典类?
"新式类" 与 "经典类" 我们所接触到的类,都是 "新式类"( new-style classes ).同时,在 Python 2.X 相 ...
最新文章
- ssh暴力破解解决方案
- 利用SQL建立数据库对象
- h2 mysql 差别_h2内存数据库和mysql数据库的区别
- DCMTK:列出DICOM结构化报告文件的内容
- easyui增删改查前段代码
- 利用MyBatis的动态SQL特性抽象统一SQL查询接口
- java HashMap的keyset方法
- linux系统中自动生成snap文件_在Linux操作系统下自动生成Makefile的方法
- windows连接linux服务器并后台运行python脚本
- 常用ColorMatrixFilter收集
- 使用Jasypt加密spring boot应用配置文件的敏感信息
- 荒野行动为什么不能获取服务器信息,荒野行动获取服务器信息一直不动 服务器信息0解决方法...
- cisco 防火墙安全策略
- ubuntu系统打不开网易云音乐解决办法。
- android串口开发!一年后斩获腾讯T3,附面试题答案
- node文件系统 常用文件处理方法
- git 在往云端push代码时候报错detached head
- 8.Python之文件
- 找工作面试_求职面试和获得Web开发工作的提示
- MS的.net讲座下载地址