继承的详解

https://www.cnblogs.com/poloyy/p/15216652.html

这篇文章讲的都是单继承,Python 中还有多继承

Python 多继承的背景

  • 大部分面向对象的编程语言,都只支持单继承,即子类有且只能有一个父类
  • 而 Python 却支持多继承(C++也支持多继承)
  • 和单继承相比,多继承容易让代码逻辑复杂、思路换了一直备受争议,中小型项目中较少使用,后来的 Java、C#、PHP 取消了多继承
  • 多继承带来的问题:多个父类中包含同名的类方法
  • Python 的解决方案:根据子类继承多个父类时这些父类的前后次序决定,即排在前面父类中的类方法会覆盖排在后面父类中的同名类方法【后面文章详解】

什么是多继承

  • 子类可以拥有多个父亲,并且具有所有父类的属性和方法
  • 儿子可以拥有多个爸爸....爸爸也可以有多个儿子.....

语法格式

class 子类(父类1, 父类2, ...):
pass

类图参考

实际代码

class A:
def test(self):
print("test") class B:
def demo(self):
print("demo") class C(A, B):
... c = C()
c.test()
c.demo() # 输出结果
test
demo

C 继承了 A、B,拥有了他们的所有属性和方法

多继承带来的顺序问题

问题的提出

如果不同的父类中存在同名的方法,子类对象在调用该方法时,会调用哪一个父类的方法呢?

重点注意

  • 正式开发中,如果需要用到多继承,那么多个父类应该避免使用同名的属性、方法
  • 如果父类存在同名的属性、方法,应该尽量避免使用多继承

类图

实际代码

class A:
def test(self):
print("AAA-test") def demo(self):
print("AAA-demo") class B:
def test(self):
print("BBB-test") def demo(self):
print("BBB-demo") class C(A, B):
... c = C()
c.test()
c.demo() # 输出结果
AAA-test
AAA-demo

调用的是父类 A 的方法

如果 C 继承父类的顺序改变一下呢

# 刚刚是 A, B ; 现在是 B, A
class C(B, A):
... c = C()
c.test()
c.demo() # 输出结果
BBB-test
BBB-demo
  • 现在变成调用父类 B 的方法了
  • 这又是为什么呢?答案就是 Python 的 MRO 方法搜索顺序

Python 的 MRO 方法搜索顺序

https://www.cnblogs.com/poloyy/p/15226424.html

多继承结合 super() 的使用呢?

https://www.cnblogs.com/poloyy/p/15223443.html

新式类和旧式类

https://www.cnblogs.com/poloyy/p/15226425.html

Python - 面向对象编程 - 多继承的更多相关文章

  1. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...

  2. Python面向对象编程——继承与派生

    Python面向对象编程--继承与派生 一.初始继承 1.什么是继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创 ...

  3. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  4. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  5. Python面向对象编程(下)

    本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...

  6. Python 面向对象编程基础

    Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...

  7. python面向对象编程学习

    python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

  8. 图解python | 面向对象编程

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...

  9. python 面向对象编程(一)

    一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...

随机推荐

  1. (JAVA5)DOS命令

    (JAVA5)DOS命令 开启DOS控制台的几种方式 win + R 输入cmd打开控制台 在任意的文件夹下面,按住shift键 + 右键单击(在此处打开Powershell窗口) 资源管理器的地址前 ...

  2. 必备!一文掌握Wordpress插件

    必备!一文掌握Wordpress插件 什么是插件? Wordpress是一个非常强大的建站系统,而在我们建站的过程中,插件的使用必不可少. 插件是WordPress功能的扩展,也是WordPress得 ...

  3. 大都市meg DFS序

    题目描述 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n的n个小村庄, ...

  4. Mybatis学习笔记-Mybatis简介

    如何获得Mybatis 中文文档 https://github.com/tuguangquan/mybatis Github https://github.com/mybatis/mybatis-3 ...

  5. 腾讯云分布式数据库TDSQL在银行传统核心系统中的应用实践

    本文是腾讯云TDSQL首席架构师张文在腾讯云Techo开发者大会现场的演讲实录,演讲主题是<TDSQL在银行传统核心系统中的应用实践>. 我是TDSQL架构师张文,同时也是TDSQL的开发 ...

  6. tomcat启动时启动窗口出现乱码一招搞定

    先来看看问题(图示),在tomcat的启动窗口打印的启动信息中包含了大量的中文乱码,虽然这些对tomcat本身的使用没有任何影响,但却非常碍眼,影响视觉效果! tomcat启动时启动窗口出现乱码的解决 ...

  7. Kurento实战之二:快速部署和体验

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. Maven 下载、安装与配置

    一.需要准备的东西 确定电脑上已经成功安装JDK 二.下载与安装 1. 前往https://maven.apache.org/download.cgi下载最新版的Maven程序: 注意:Maven3. ...

  9. NOIP 模拟 $16\; \rm Star Way To Heaven$

    题解 \(by\;zj\varphi\) 看懂题!!! 从最左穿到最右,一定会经过两个星星之间或星星和边界之间,那么我们穿过时当前最优一定是走中点 而我们要求最小的距离最大,那么我们将所有星星和边界( ...

  10. docker配置cdn-容器内可以通过域名访问

    添加docker的cdn配置 # 没有这个文件创建 vim /etc/docker/daemon.json 添加内容如下 { "dns":["8.8.8.8", ...