1、继承的概念

在Python中,如果两个类存在父子级别的继承关系,子类中即便没有任何属性和方法,此时创建一个子类对象,那么这个子类对象会拥有父类中所有属性和方法的使用权,这就是在Python中的继承概念。

在Python测继承中,我们一般会抽取出一类事物中,所具有相同的特征属性和行为到一个类中,这样的类我们称之为父类,也可以叫超类、基类。

凡是通过继承创建出来的类,我们称之为子类或者衍生类,可以直接继承父类中的属性和方法。

2、继承的好处

  • 继承最大的作用就是简化代码,提高了代码的复用性,提高软件开发效率。
  • 继承的出现让类与类之间产生了关系,提供了多态的前提。

3、继承体验

Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法,具体如下:

# 继承:子类默认继承父类的所有属性和方法
# 1. 定义父类Parent
class Parent(object):
def __init__(self):
self.num = 1 def info_print(self):
print(self.num) # 2. 定义子类Child 继承父类Parent
class Child(Parent):
pass # 创建Child类实例,调用父类Parent中的方法和属性
ch = Child()
print(ch.num) # 1
ch.info_print() # 1

说明:在Python中,所有类默认继承object类,object类是顶级类或基类,其他子类都是object的派生类。

4、单继承

单继承:一个父类只被一个子类继承,就叫做单继承。

故事主线:一个煎饼果子老师傅,在煎饼果子界摸爬滚打多年,研发了一套精湛的摊煎饼果子的技术。师父要把这套技术传授给他的唯一的最得意的徒弟。

# 1. 师父类,属性和方法
class Master(object):
def __init__(self):
self.gongfu = '[古法煎饼果子配方]' def make_cake(self):
print(f'运用{self.gongfu}制作煎饼果子') # 2. 定义徒弟类,继承师父类
class Prentice(Master):
pass # 3. 创建对象tudi
tudi = Prentice()
# 4. 对象访问实例属性
print(tudi.gongfu) # [古法煎饼果子配方]
# 5. 对象调用实例方法
tudi.make_cake() # 运用[古法煎饼果子配方]制作煎饼果子

5、多继承

故事推进:徒弟是个爱学习的好孩子,想学习更多的煎饼果子技术,于是搜索到学院派煎饼果子,决定学院学习更多的煎饼果子技术。

所谓多继承意思就是一个类同时继承了多个父类。

# 1.创建师父类,属性和方法
class Master(object):
def __init__(self):
self.gongfu = '[古法煎饼果子配方]' def make_cake(self):
print(f'运用{self.gongfu}制作煎饼果子') # 2.创建学院派类 属性和方法
class School(object):
def __init__(self):
self.gongfu = '[学院派煎饼果子配方]' def make_cake(self):
print(f'运用{self.gongfu}制作煎饼果子') # 2. 定义徒弟类,继承师父类 和 宗师类
class Prentice(School, Master):
pass # 3. 创建对象tudi
tudi = Prentice()
# 4. 对象访问实例属性
print(tudi.gongfu)
# 5. 对象调用实例方法
tudi.make_cake()
"""
输出内容:
[学院派煎饼果子配方]
运用[学院派煎饼果子配方]制作煎饼果子
"""

总结:

  • 在Python中是支持多重继承的,也就是我们可以为一个类同时指定多个父类,如:
    class Prentice(School, Master):
  • 多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的属性和方法。
  • 如果多个父类中有同名的方法,则会现在第一个父类中寻找,然后找第二个,然后找第三个,以此类推。

    (在详细唠叨一下,找第一个类,然后找这个类的父类,如果没有在开始找第二个类,然后第二个类如果有父类,再找第二个类的父类,以此类推,如有重复的父类,之前找过的类,不重复查找。)

    也就是如果一个类继承多个父类,优先继承第一个父类的同名属性和方法。
  • 在开发中没有特殊的情况,应该尽量避免使用多重继承,因为多重继承会让我们的代码过于复杂。

『无为则无心』Python面向对象 — 53、对Python中封装的介绍的更多相关文章

  1. 『无为则无心』Python面向对象 — 45、面向对象编程

    目录 1.面向对象编程的概念 2.面向对象编程和面向过程编程的区别 (1)面向过程编程 (2)面向对象编程 3.举例理解面向对象 4.Python的面向对象编程 5.面向对象的几大核心特性 1.面向对 ...

  2. 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)

    目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...

  3. 『无为则无心』Python基础 — 3、搭建Python开发环境

    目录 1.Python开发环境介绍 2.Python解释器的分类 3.下载Python解释器 4.安装Python解释器 5.Python解释器验证 1.Python开发环境介绍 所谓"工欲 ...

  4. 『无为则无心』Python基础 — 4、Python代码常用调试工具

    目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...

  5. 『无为则无心』Python基础 — 5、Python开发工具的安装与使用

    目录 1.Pycharm下载 2.Pycharm安装 3.PyCharm界面介绍 4.基本使用 (1)新建Python项目 (2)编写Python代码 (3)执行代码查看结果 (4)设置PyCharm ...

  6. 『无为则无心』Python基础 — 16、Python序列之字符串的下标和切片

    目录 1.序列的概念 2.字符串的下标说明 3.字符串的切片说明 1.序列的概念 序列sequence是Python中最基本的数据结构.指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通 ...

  7. 『无为则无心』Python函数 — 34、lambda表达式

    目录 1.lambda的应用场景 2.lambda语法 3.快速入门 4.示例:计算a + b 5.lambda的参数形式 6.lambda的应用 lambda表达式的主要作用就是化简代码. 匿名函数 ...

  8. 『无为则无心』Python函数 — 39、Python中异常的传播

    目录 1.异常的传播 2.如何处理异常 1.异常的传播 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播.如果函数中没有对异常进行处理,则异常会继续向函数调用者传播.如果函数调 ...

  9. 『无为则无心』Python面向对象 — 46、类和对象

    目录 1.理解类和对象 2.类 3.对象 4.Python中的对象 5.类和对象的定义 (1)定义类 (2)创建对象 (3)练习 6.拓展:isinstance() 函数 1.理解类和对象 (1)类和 ...

随机推荐

  1. Redis之持久化方式详解

    背景:Redis之所以能够在技术革新发展迅速的时代超越Memcache等其他Nosql数据库,最主要的一点是Redis提供数据持久化,能够根据持久化策略将缓存数据灵活的写到磁盘上,更好地满足了当下海量 ...

  2. docker安装、下载镜像、容器的基本操作

    文章目录 一.docker安装与基本使用 1.docker的安装.从远程仓库下载镜像 2.配置docker国内源 二.创建容器 1.create i.创建容器 ii.进入容器 iii.启动容器 2.r ...

  3. Centos下安装Spark

    (注:由于第一次安装操作失误,所以重新安装了,因此截图为第一次的截图,命令为第二次安装的命令) (注:图是本人安装所截图,本人安装参考网址:https://www.cnblogs.com/shaosk ...

  4. CSS设置标签、图片放大、缩小、旋转、移动(tranform)

    CSS设置标签.图片放大.缩小.旋转.移动(tranform) 1.缩小和放大属性(scale) 格式:tranform:缩小类型(数值): 注意:缩小和放大都是 scale : 其中的值(0~1)代 ...

  5. 很详细的FFT(快速傅里叶变换)概念与实现

    FFT 首先要说明一个误区,很多人认为FFT只是用来处理多项式乘的,其实FFT是用来实现多项式的系数表示法和点值表示法的快速转换的,所以FFT的用处远不止多项式乘. FFT的前置知识:点值表示法,复数 ...

  6. P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two

    // Problem: P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two // Contest: Luogu // URL: https://www.luogu.com ...

  7. C++类对象大小问题(一)

    先看如下代码: #include<iostream> using namespace std; class Base1 { public: }; class Base2 { public: ...

  8. 通俗易懂详解iptables

    防火墙相关概念 从逻辑上讲.防火墙可以大体分为主机防火墙和网络防火墙. 主机防火墙:针对于单个主机进行防护. 网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网. ...

  9. http8种请求方式

    根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELE ...

  10. ant -design vue a-tree 树形控件

    话不多说,先上代码. <a-tree v-if="this.treeData && this.treeData.length > 0" ref=&quo ...