1. 初识继承

  • 概念:专业角度:如果B类继承A类,B类就称为子类,派生类,A类就称为父类,超类,基类
  • 种类:单继承,多继承
  • 面向对象的三大特征:继承,封装,多态
  • 继承的优点:
    1. 减少重复的代码
    2. 增加类之间的耦合性(不宜多,宜精)
    3. 使代码更清晰,合理化

2. 单继承

  • 定义:只有一个父类

  • 执行父类的属性和方法:

    1.类名执行父类的属性和方法

    2.派生类对象执行父类的属性和方法

    ​ 1.查询顺序:
    ​ 单向不可逆,子类可以使用父类的属性和方法,父类不可以使用子类的属性和方法

    ​ 2.实例化对象时必须执行__init__方法,类中没有,从父类找,父类没有,从object类中找。

  • 既要执行子类的方法,又要执行父类的方法

    方法一:不依赖继承 / 父类.func(对象,其他参数)

    class Animal(object):
    type_name = "动物类"
    def __init__(self,name,sex,age):
    self.name = name
    self.age = age
    self.sex = sex
    def eat(self):
    print("吃东西")
    class Person(Animal):
    def __init__(self,name,sex,age,mind):
    Animal.__init__(self,name,sex,age)
    self.mind = mind
    def eat(self):
    super().eat()
    print(f'{self.name}会吃饭') p1 = Person("张三","男",18,"有思想")
    p1.eat()

    方法二:依赖继承 / 利用super

    class Aniaml(object):
    type_name = '动物类'
    def __init__(self,name,sex,age):
    self.name = name
    self.age = age
    self.sex = sex
    def eat(self):
    print('吃东西')
    class Person(Aniaml):
    def __init__(self,name,sex,age,mind):
    {super(Person,self).__init__(name,sex,age)} (完整写法)
    super().__init__(name,sex,age)
    self.mind = mind
    def eat(self):
    super().eat()
    print('%s 吃饭'%self.name)
    class Cat(Aniaml):
    pass
    p1 = Person('张三','男',18,'有思想')
    print(p1.__dict__) # 利用super,super().func(参数)
    # super.__init__执行父类
    # 执行父类的__init__方法,重构父类方法.

    单继承应用示例:

    class Base:
    def __init__(self,num):
    self.num = num
    def func1(self):
    print(self.num)
    self.func2()
    def func2(self):
    print(222,self.num)
    class Foo(Base):
    def func2(self):
    print(222,self.num)
    lst = [Base(1),Base(2),Foo(3)]
    for obj in lst:
    obj.func1() # 结果:
    1
    222 1
    2
    222 2
    3
    222 3
  • 单继承总结:

    1. 面向对象中super的作用:

    ​ super().func(参数) 重构父类的方法,严格按照对象从属类的mro顺序执行

3. 多继承

  • Python类分为两种:
    经典类:不继承object类,深度优先原则,深度优先.从左至右,深度优先.
    新式类:继承object类,mro(C3)算法(新式类查询顺序)

  • Python2x:Python2.2之前都是经典类,Python2.2之后,经典类和新式类共存
    Python3x:全都是新式类,如果基类谁都不继承,那这个类会默认继承object类

  • 新式类推导示例:

    class O:
    name = '张三' class D(O):
    pass class E(O):
    name = '李四'
    # pass
    class F(O):
    name = '王五' class B(D,E):
    pass class C(E,F):
    pass class A(B,C):
    pass obj = A()
    print(obj.name) # mro(Child(Base1,Base2)) = [ Child ] + merge( mro(Base1), mro(Base2), [ Base1, Base2] )
    # mro(A(B,C)) = [A] + merge(mro(B),mro(C),[B,C]) '''
    mro(A(B,C)) = [A] + merge(mro(B),mro(C),[B,C]) mro(B(D,E)) = [B] + merge(mro(D),mro(E),[D,E]) mro(B(D,E)) = [B] + merge([D,O],[E,O],[D,E])
    mro(B(D,E)) = [B,D] + merge([O],[E,O],[E])
    mro(B(D,E)) = [B,D,E] + merge([O],[O])
    mro(B(D,E)) = [B,D,E,O] mro(C) = [C,E,F,O] mro(A(B,C)) = [A] + merge([B,D,E,O],[C,E,F,O],[B,C])
    = [A,B] + merge([D,E,O],[C,E,F,O],[C])
    = [A,B,D] + merge([E,O],[C,E,F,O],[C])
    = [A,B,D,C] + merge([E,O],[E,F,O])
    = [A,B,D,C,E] + merge([O],[F,O])
    = [A,B,D,C,E,F,O]
    ''' # print(A.mro())
  • 经典类推导示例:见下面示例

4. 总结

  1. 类的静态属性,如果指向一个可变数据类型,对象或者类名都可以给这个可变数据类型内部增,删,改,查(不可以对其整体增,删,改,查)

    示例代码:

    class A:
    name = []
    p1 = A()
    p2 = A()
    p1.name.append(1)
    # p1.name,p2.name,A.name 分别是什么?
    # 结果:[1],[1],[1]
  2. 新式类,经典类示例

    class A:
    pass
    class B(A):
    pass
    class C(A):
    pass
    class D(A):
    pass
    class E(B, C):
    pass
    class F(C, D):
    pass
    class G(D):
    pass
    class H(E, F):
    pass
    class I(F, G):
    pass
    class K(H, I):
    pass
    # 如果这是经典类,请写出他的继承顺序。
    KHEBACFDIG # 如果这是新式类,请写出他的继承顺序,并写出具体过程。
    KHEBIFCGDA

python 面向对象专题(三):继承的更多相关文章

  1. Python面向对象中的继承、多态和封装

    Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃ ...

  2. python 面向对象专题(十):特殊方法 (三)__get__、__set__、__delete__ 描述符(三)方法是描述符

    在类中定义的函数属于绑定方法(bound method),因为用户定义的函数都有 __get__ 方法,所以依附到类上时,就相当于描述符.示例 20-13 演示了从 面向对象专题(九)示例 20-8 ...

  3. python面向对象(三)之继承

    继承 介绍 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力.继承即常说的is-a关系.子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承 ...

  4. python 面向对象专题(一):面向对象初识、面向对象结构、类、self、实例化对象

    https://www.cnblogs.com/liubing8/p/11301344.html 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象 ...

  5. Python面向对象之类的继承(2)

    1.除了封装,Python面向对象还有继承这一功能,如下代码,这是简单的继承功能. class Animal: def chi(self): print(self.name+' 吃') def he( ...

  6. python 面向对象专题(七):异常处理

    目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 2.try 6. 常见异常种类 1. ...

  7. python 面向对象专题(六):元类type、反射、函数与类的区别、特殊的双下方法

    目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3. 函数与类的区别 4. 特殊的双下方法 1. 元类type type:获取对象 ...

  8. python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass

    https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...

  9. python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super

    https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...

随机推荐

  1. 商城04——门户网站介绍&商城首页搭建&内容系统创建&CMS实现

    1.   课程计划 1.门户系统的搭建 2.显示商城首页 3.内容管理系统的实现 a)  内容分类管理 b) 内容管理 2.   门户系统的搭建 2.1. 什么是门户系统 从广义上来说,它将各种应用系 ...

  2. skynet 初步分析

    自己想实现一个tcp 粘包,残包的功能.  先看看一些开源的库是怎么实现的. 首先开启一个线程.使劲的执行: skynet_socket_poll skynet_socket_poll  这个玩意是干 ...

  3. cb51a_c++_STL_算法_根据第n个元素排序nth_element

    cb51a_c++_STL_算法_根据第n个元素排序nth_elementnth_element(b,n,e),比如最大的5个数排序,或者最小的几个数nth_element(b,n,e,p)对比:pa ...

  4. Python学习日志-02

    (2)Python如何运行程序 Python解释器简介: Python不仅仅是一门编程语言,它也是一个名为解释器的软件包.解释器是一种让其他程序运行起来的程序.当你编写了一段Python程序,Pyth ...

  5. Win10搭建VM12.0.1虚拟机,虚拟机网络同宿主机ping不通的解决办法

    准备系统学习Linux系统,在电脑搭建了一个CentOS虚拟机,希望能从宿主机连接至虚拟机. 尝试了很多办法,碰到各种坑,最后这个方法成功了! 分享给大家,希望有所帮助. 一.环境 1.宿主机:Win ...

  6. JVM生命周期与运行过程

    1. Java虚拟机的生命周期 Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序.程序开始执行时他才运行,程序结束时他就停止.你在同一台机器上运行三个程序,就会 ...

  7. Vue错误汇总

    1.Vue导入js后没反应{{msg}}仍是{{msg}} 错误原因:js里写错了,或者没new一个Vue html页面: 解决方法:代码加入 new

  8. 动力节点 mysql 郭鑫 34道经典的面试题三

    1.第十五题 15.列出受雇日期早于其直接上级的所有员工编号.姓名.部门名称 思路一:第一步将emp a看成员工表,将emp b 看成领导表,员工表的mgr字段应该等于领导表的主键字段 mysql&g ...

  9. 重学 Java 设计模式:实战迭代器模式「模拟公司组织架构树结构关系,深度迭代遍历人员信息输出场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 相信相信的力量! 从懵懂的少年,到拿起键盘,可以写一个Hell ...

  10. Python 简明教程 ---10,Python 列表

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 程序 = 算法 + 数据结构 -- Nicklaus Wirth 目录 从这句话程序 = 算法 + ...