灵魂三问

什么是继承?

继承是一种创建新的类的方式,新创建的叫子类,继承的叫父类、超类、基类。

特点:子类可以使用父类的属性(特征、技能)

继承是类与类之间的关系

为什么要继承?

减少代码冗余、提高重用性

如何用继承?

单继承

class grandFather():print('我是爷爷')class Parent(grandFather):print('我是父类')class SubClass(Parent):print('我是子类')sub = SubClass() #结果:我是爷爷
#           我是父类
#           我是子类
#注意:类在定义的时候就执行类体代码,执行顺序是从上到下

多继承

class Parent2():print('我是第二个爹')class Parent():print('我是第一个爹')class SubClass(Parent, Parent2):print('我是子类')#
# 结果:我是第二个爹
#            我是第一个爹
#        我是子类
#注意:类在定义的时候就执行类体代码,执行顺序是从上到下
  • 使用__bases__方法可以获取子类继承的类

    class Parent2():print('我是第二个爹')class Parent():print('我是第一个爹')class SubClass(Parent, Parent2):print('我是子类')print(SubClass.__bases__)
    #注意,如果sub = SubClass(),sub是没有__bases__方法的

新式类、经典类

  • 继承了object的类以及该类的子类,都是新式类。

    在Python3中如果一个类没有继承任何类,则默认继承object类。因此python3中都是新式类

  • 没有继承object的类以及该类的子类,都是经典类。

    在Python2中如果一个类没有继承任何类,不会继承object类。因此,只有Python2中有经典类。

继承与抽象

抽象:通过抽象可以得到类,抽象是一种分析的过程。例如:从小猪佩奇、猪八戒、猪刚鬣、猪猪侠这些具体的对象中,可以分析一下,抽象出一个类,这个类就是猪类。接着,可以从猪、猫、狗等中,可以抽象出一个动物类。先分析、抽象之后,就可以通过继承,在程序上实现这个结构。

class Animals:passclass Pig(Animals):passclass Dog(Animals):passclass Cat(Animals):pass

派生类

概念:派生,就是在子类继承父类的属性的基础上,派生出自己的属性。子类有不同于父类的属性,这个子类叫做派生类。通常情况下,子类和派生类是同一个概念,因为子类都是有不同于父类的属性,如果子类和父类属性相同,就没必要创建子类了。

class Animals:passclass Dog(Animals):pass#这时候Dog类不是派生类
class Animals:def __init__(self, name):self.name = namedef walk(self):print('我会走')class Dog(Animals):#Dog类派生出bite功能#派生:狗有咬人的技能def bite(self):print('我会咬人')

组合

除了继承之外,还有一种提高重用性的方式:组合

组合指的是,在一个类A中,使用另一个类B的对象作为类A的数据属性(特征)(变量),成为类的组合。

#例子:人和手机,人想要有打电话的功能,想要打电话,就需要用到手机,人想要用到手机里面的打电话功能,肯定不能用继承,人继承手机就非常尴尬了,这时候就可以用到组合。
class Mobile():def __init__(self, color):self.color = colordef call(self):print('老子可以打电话')class People():def __init__(self, name, mobile):self.name = nameself.mobile = mobilemobile = Mobile('yellow')
people = People('小白', mobile)
people.mobile.call()#结果:老子可以打电话

继承建立了派生类和基类的关系,是一种是的关系,比如白马是马,人是动物。

组合建立了两个类之间'有'的关系,比如人有手机,然后人可以使用手机打电话。

属性查找顺序

对象查找属性的顺序:对象自己的 - > 所在类中 -> 找父类 - >父类的父类 ->Object

覆盖

也称之为重写 overrides

当子类出现了与父类名称完全一致的属性或是方法

子类中访问父类的内容

方式1:
super(当前类名称,self).你要调的父类的属性或方法
方式2:
super().你要调的父类的属性或方法
方式3:
类名称.你要调的父类的属性或方法(self)

强调在强调:

当你继承一个现有的类,并且你覆盖了父类的init方法时,必须在初始化方法的第一行调用父类的初始化方法,并传入父类所需的参数

类的mro方法

mro方法可以列出类继承的所有父类,并且有顺序。调用mro方法要用类名.mro

菱形继承

类的继承图是从一个类开始继承,继承到顶点时,多个类继承同一个顶点,这种就叫做菱形继承。菱形继承查找类时就用广度查找。什么叫广度查找呢?TMD, 不想写了。

遇到共同父类时就广度

经典类都是深度优先

转载于:https://www.cnblogs.com/KbMan/p/11247473.html

Python中的继承相关推荐

  1. Python中的继承和多态

    本文以生活中的基础现象为切入点,主要介绍了Python基础中继承和多态,包括单继承.多继承的语法.多态常见的 "鸭子类型". 以及如何重写父类的方法都做了详细的讲解. 一.继承的介 ...

  2. python中继承是什么意思_如何理解Python中的继承?python入门

    如何理解Python中的继承?如今,python编程语言深受企业和个人的喜爱.python开发工程师是近年来互联网行业非常热门的职业岗位之一.学习python的人除了零基础的,还有一部分是在职运维.在 ...

  3. 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例

    前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...

  4. Python中菱形继承的MRO顺序及property属性

    Python中菱形继承的MRO顺序及property属性 文章目录 Python中菱形继承的MRO顺序及property属性 一.Python中菱形继承的MRO顺序 1. 单独调用父类的方法 2. 多 ...

  5. python中的继承冲突及继承顺序

    python中的继承冲突及继承顺序 简单的菱形继承 设计类如下 #mermaid-svg-IYOh6g5InwMB9svy {font-family:"trebuchet ms", ...

  6. python中的继承有什么特点_python类的继承是什么?类的继承有什么样的规则?

    在这篇文章之中我们来了解一下python类的继承,对于刚刚接触到python这一编程语言的朋友来说,对于python类的继承的了解应该比较少,不过没关系,在接下来的文章之中我们就来了解一下python ...

  7. python中的继承有什么特点_Python类的继承机制是什么

    继承是面向对象的三大特征之一,也是实现代码复用的重要手段.继承经常用于创建和现有类功能类似的新类,又或是新类只需要在现有类基础上添加一些成员(属性和方法),但又不想直接将现有类代码复制给新类. Pyt ...

  8. python中的继承有什么特点_Python中 什么是面向对象-继承和多态

    文字有点长,对于不想看文字的朋友,可以去这里看视频,内容和这个文字一样的,视频可能更好理解 https://www.piqizhu.com/v/zaX9K4pd4GE 上一篇文章<python教 ...

  9. python中的继承与多态_Python3 与 C# 面向对象之~继承与多态

    2.继承               ¶ 2.1.单继承               ¶ 在OOP中,当我们定义一个Class的时候,可以从某个现有的Class继承 新的Class称为子类,而被继承的 ...

  10. python有什么用处案例_用实例解释Python中的继承和多态的概念

    在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...

最新文章

  1. 这份“插件英雄榜Top20”才是Chrome的正确打开方式!
  2. Python3 websocket通信
  3. 使用Hugo搭建自己的个人博客网站
  4. linux 7个运行级别 runlevel 简介
  5. 皮一皮:这年头,没看过火影还没法做医生了...
  6. Felgo简介--Qt开发者的福音
  7. 每天一道LeetCode-----最长无重复子串
  8. 通俗易懂!视觉slam第一部分——slam简介与相机介绍
  9. xtrabackup 2.4.3 BUG
  10. 文件系统 和 网络附接存储(NAS: Network Attached Storage)
  11. 多层陶瓷电容器用处_陶瓷电容器的作用有哪些?
  12. MonthCalendar 的使用
  13. 享元模式(羽量级模式、蝇量级模式Flyweight,对象结构型模式)
  14. 053试题 - 320/321/322/323/324/326/330/332/544/553/585/586/587/588/589/592/596/597/598/599 rman backup
  15. sql网上书店项目的实现
  16. VueX 以及axios
  17. Halcon contour相关操作
  18. [转]Java咖啡馆---叹咖啡
  19. 记一次图片编辑工具pinta二进制包的安装踩坑过程
  20. Home Assistant + 树莓派:强大的智能家居系统

热门文章

  1. mysql5.6创建用户并授予指定数据库或表权限
  2. 学生成绩管理网站之——课程视频分享实现
  3. AOP和IOC的作用
  4. Python 结巴分词(1)分词
  5. Exchange 2010和Exchange 2016共存部署-10:配置多域名证书
  6. 我又来定计划了~2015-8至年底
  7. Javascript与框架prototype,JQyuery调研
  8. 愤怒的小鸟【$DP$优化】
  9. [笔记]何为Linux及其文件系统(四)
  10. 利用SQL索引提高查询速度