Python - 面向对象编程 - 多继承
继承的详解
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 - 面向对象编程 - 多继承的更多相关文章
- Python 面向对象编程 继承 和多态
Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...
- Python面向对象编程——继承与派生
Python面向对象编程--继承与派生 一.初始继承 1.什么是继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- python面向对象编程进阶
python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...
- Python面向对象编程(下)
本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...
- Python 面向对象编程基础
Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...
- python面向对象编程学习
python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...
- 图解python | 面向对象编程
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...
- python 面向对象编程(一)
一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...
随机推荐
- vue3源码难学,先从petite-vue开始吧
如今这个世道,作为一个有几年工作经验的前端,不学点框架源码都感觉要被抛弃了,react或vue要能吹吹牛吧,最好能造个轮子,听说vue3源码好学点,那么学学vue3,但是学起来还是那么费劲,感觉快放弃 ...
- Codeforces Round #735 (Div. 2) 题解
比赛地址:https://codeforces.com/contest/1554. 只有 ABCD 的题解,E 不会. A 答案是 \(\max_i\{a_ia_{i+1}\}\).证明:(反证)如果 ...
- python3中的缺省参数和global
关于py中缺省参数: 在声明函数的时候对某些参数(一个或多个)进行赋值,在你调用的时候无需在实参列表中体现该参数,但是在执行的时候会默认加上这个已经在形参中定义好的参数. 但是,缺省参数必须放在最后, ...
- Spring最简单构建一个后台{msg:"登录成功",code:200,data:null}
一.简介 {msg:"登录成功",code:200,data:null} 二.两种请求 如果严格msg code data也带"" @RestControlle ...
- ;~ 小部分AutoHotkey脚本源代码测试模板样板.ahk
; ;~ 小部分AutoHotkey脚本源代码测试模板样板.ahk ;~ 请把一行或几行少量代码放到此文件中实际测试一下,;~ 看看测试结果如何,等到能够实现代码功能时再复制到自己的脚本代码文件中;~ ...
- 只要套路对,薪资直接翻一倍!保姆级Android面试葵花宝典,肝完面试犹如开挂
跳槽,这在 IT 互联网圈是非常普遍的,也是让自己升职加薪,走上人生巅峰的重要方式.那么作为一个普通的Android程序猿,我们如何才能斩获大厂offer 呢? 疫情向好.面试在即,还在迷茫踌躇中的后 ...
- js中判断数据类型的四种方法总结
js中判断数据类型的四种方法 前言 在js中,我们经常需要判断数据的类型,那么哪些方法可以用来判断数据的类型呢?哪种方法判断数据类型最准确呢? 我们来一个个分析: 1.typeof typeof是一个 ...
- 【大咖直播】Elastic Security 安全管理实战工作坊
本次实战课程,旨在用 Elastic Security 来武装每一位安全运维人员,从容预防.检测和应对网络威胁.这款免费开放的解决方案提供了 SIEM.端点安全.威胁狩猎.云监控.恶意软件保护等功能. ...
- centos7 更新源
centos7 yum源更新 先进入到yum源文件cd /etc/yum.repo.d/ 1.创建一个repo_bak目录,用于保存系统中原来yum的repo文件. sudo mkdir rep ...
- Python - typing 模块 —— TypeVar 泛型
前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...