本节内容

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):
pass d = D()
print(d.n) #输出
B

③注释B类中的代码

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

④注释C类中的代码

 class A(object):
def __init__(self):
self.n = "A" class B(A):
pass class C(A):
pass class D(B,C):
pass d = 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):
pass
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类中代码

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):
pass d = D()
print(d.n) #输出
B

③注释B类中的代码

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

④注释A类中的代码

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

四、总结

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

面向对象【day07】:新式类和经典类(八)的更多相关文章

  1. Python之面向对象新式类和经典类

    Python之面向对象新式类和经典类 新式类和经典类的继承原理: 在Python3中,就只有新式类一种了. 先看Python3中新式类: 类是有继承顺序的: Python的类是可以继承多个类的,也就是 ...

  2. python之继承、抽象类、新式类和经典类

    一.上节补充1.静态属性静态属性 : 类的属性,所有的对象共享这个变量 如果用对象名去修改类的静态属性:在对象的空间中又创建了一个属性,而不能修改类中属性的值 操作静态属性应该用类名来操作 例1:请你 ...

  3. python中新式类和经典类的区别

    1).python在类中的定义在py2-3版本上是使用的有新式类和经典类两种情况,在新式类和经典类的定义中最主要的区别是在定义类的时候是否出现引用object;如:经典类:Class 类名::而新式类 ...

  4. Python新式类与经典类的区别

    1.新式类与经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,都会获得所有“新式类”的特性:反之,即不由任意内置类型派生出的类 ...

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

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

  6. Python 新式类与经典类

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

  7. python-反射、新式类与经典类搜索的优先级

    preface include: getattr setattr delattr hasattr class webserver(object): def __init__(self,num): se ...

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

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

  9. 03-python的新式类和经典类区别

    新式类就是  class person(object): 这种形式的, 从py2.2 开始出现的 新式类添加了: __name__ is the attribute's name. __doc__ i ...

随机推荐

  1. Software Engineering homework2

    现在市面上有诸多软件,选取一类软件,请分析: Q1:此类软件是什么时候出现的,这些软件是怎么说服你(陌生人)成为它们的用户的?他们的目标都是盈利的么?他们的目标都是赚取用户的现金的么?还是别的? A1 ...

  2. python2 与 python3 实现共存

    已有配置  Anaconda2+python2.7 方案一:直接安装官网原生python3.6 1.修改根目录下python.exe ->python3.exe    pythonw.exe - ...

  3. 微信小程序navigator

    如果是小程序自身页面的跳转 <navigator  open-type="navigate" target="self" url="target ...

  4. Ajax的使用~~~整理

    之前对于ajax没有详细的学习,只是碰到的时候,就记一点,不是很有条理.虽然常用的都会用,但真经不起询问,知其然而不知其所以然,所以专门看了一下<JavaScript高级程序设计>中对aj ...

  5. JEECG--去掉(增加)登陆页面验证码功能 - CSDN博客

    JEECG--去掉(增加)登陆页面验证码功能 - CSDN博客https://blog.csdn.net/KooKing_L/article/details/79711379

  6. Linux下Vim使用备忘

    1.Insert键,决定是Insert模式还是Replace模式. 2.Esc键,退出编辑模式(Insert Or Replace). 3.:wq (ZZ) 保存并退出Vim. http://caib ...

  7. 关于windows内存的一些简单看法

    1. 公司的产品有一个检查windows操作系统的功能,验证是否满足 只能客户端 的运行需求: 这里面的可用虚拟内存是128T 感觉非常奇怪了. 然后自己想了下128T 是 2的 47次方 猜想是不是 ...

  8. MES模块

    基础数据管理:产品模型.工厂模型.工艺模型 仓储管理 成本管理 绩效管理 看板管理 日志管理 设备管理:工装管理.设计器具管理.设备保养管理.设备备件管理.设备采集管理.设备点检管理.设备故障管理.设 ...

  9. scipy积分 integral

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/24 15:03 # @Author : zhang chao # @Fi ...

  10. caffe配置NCCL

    设置Makefile.config 打开开关: USE_NCCL := 1, 并添加nccl库路径 USE_NCCL := 1 INCLUDE_DIRS += /path/nccl/build/inc ...