Python学习之路-面向对象:三个基本特征

Python学习之路-面向对象:三个基本特征

三个基本特征

  1. 封装:根据职责将属性和方法封装到一个抽象的类中
  2. 继承:实现代码的重用,相同的代码不需要重复的编写
  3. 多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度

封装

封装是面向对象编程的一大特点,面向对象编程的第一步就是将属性和方法封装到一个抽象的类中,外界使用类创建对象,然后让对象调用方法,对象方法的细节都被封装在类的内部。

{{< admonition tip “提示” true >}}

一个对象的属性可以是另外一个类创建的对象

{{< /admonition >}}

继承

单继承

概念

子类拥有父类的所有方法和属性

语法
class 类名(父类名):pass

{{< admonition tip “提示” true >}}

子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发.子类中应该根据职责,封装子类特有的属性和方法

{{< /admonition >}}

传递性

子类拥有父类以及父类的父类中封装的所有属性和方法,例:C 类从 B 类继承,B 类又从 A 类继承,那么 C 类就具有 B 类和 A 类的所有属性和方法

重写

子类拥有父类的所有方法和属性,子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发,当父类的方法实现不能满足子类需求时,可以对方法进行重写(override)。重写父类方法有两种情况:

  • 覆盖父类的方法:如果在开发中,父类的方法实现和子类的方法实现完全不同,就可以使用覆盖的方式,在子类中重新编写父类的方法实现。具体的实现方式,就相当于在子类中定义了一个和父类同名的方法并且实现,重写之后在运行时,只会调用子类中重写的方法,而不再会调用父类封装的方法

  • 对父类方法进行扩展:子类的方法实现中包含父类的方法实现父类原本封装的方法实现是子类方法的一部分就可以使用扩展的方式。在子类中重写父类的方法在需要的位置使用 super().父类方法 来调用父类方法的执行代码其他的位置针对子类的需求,编写子类特有的代码实现

{{< admonition tip “提示” true >}}

关于 super:在 Pythonsuper是一个特殊的类。super() 就是使用 super 类创建出来的对象,最常使用的场景就是在重写父类方法时,调用在父类中封装的方法实现。

{{< /admonition >}}

{{< admonition tip “提示” true >}}

在开发时,父类名super() 两种方式不要混用,如果使用当前子类名调用方法,会形成递归调用,出现死循环。

{{< /admonition >}}

私有属性和私有方法

私有属性、方法是对象的隐私,不对外公开,外界以及子类都不能直接访问。私有属性、方法通常用于做一些内部的事情。

子类对象不能在自己的方法内部,直接访问 父类的私有属性或私有方法。子类对象可以通过父类的公有方法间接访问到私有属性或私有方法

多继承

概念

子类可以拥有多个父类,并且具有所有父类的 属性和方法。

语法
class 子类名(父类名1, 父类名2...)pass

{{< admonition warning “注意事项” true >}}

如果父类之间存在同名的属性或者方法,应该尽量避免使用多继承。

{{< /admonition >}}

{{< admonition note “补充” true >}}

  1. super().__init__相对于类名.__init__,在单继承上用法基本无差
  2. 但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次,具体看前面的输出结果
  3. 多继承时,使用super方法,对父类的传参数,应该是由于Pythonsuper的算法导致的原因,必须把参数全部传递,否则会报错
  4. 单继承时,使用super方法,则不能全部传递,只能传父类方法所需的参数,否则会报错
  5. 多继承时,相对于使用类名.__init__方法,要把每个父类全部写一遍, 而使用super方法,只需写一句话便执行了全部父类的方法,这也是为何多继承需要全部传参的一个原因

{{< /admonition >}}

了解

新式类:以 object 为基类的类,推荐使用

旧式类:不以 object 为基类的类,不推荐使用

Python 3.x 中定义类时,如果没有指定父类,会默认使用 object 作为该类的基类 —— Python 3.x 中定义的类都是新式类

{{< admonition tip “提示” true >}}

object Python 为所有对象提供的基类,提供有一些内置的属性和方法,可以使用 dir 函数查看。

今后在定义类时,如果没有父类,建议统一继承自 object

{{< /admonition >}}

多态

多态不同的子类对象调用相同的父类方法,产生不同的执行结果。多态可以增加代码的灵活度,以继承和重写父类方法为前提,是调用方法的技巧,不会影响到类的内部设计。

{{< admonition tip “提示” true >}}

多态更容易编写出出通用的代码,做出通用的编程,以适应需求的不断变化!

{{< /admonition >}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】QThread moveTothread-多线程的两种实现方法

一、如何理解多线程 二、实现多线程的两种方式&#xff08;面向应用&#xff09; 2.1 继承 QThread 的类 2.2 (推荐这种方式)函数 moveTothread() 三、多线程的释放问题&#xff08;善后工作&#xff09; 多线程的两种实现方法 一、如何理解多线程二、实现多线程的两种方式&…

跟着暄桐林曦老师读《宝贵的人生建议》,重视心这颗种子

暄桐林曦老师在《见道明心的笔墨》读书课上讲到&#xff1a;人要在心这颗种子上去进化。当人的动机和果实都清静时&#xff0c;才能在内心具足里转化出更多可能性&#xff0c;进入正面的循环里。“宽以待人&#xff0c;严以律己&#xff0c;反之&#xff0c;则人人身处地狱”&a…

贯穿设计模式-装饰者模式

样例代码 涉及到的项目样例代码均可以从https://github.com/WeiXiao-Hyy/Design-Patterns.git获取 需求 旨在不改变一个对象逻辑的前提下&#xff0c;为这个对象添加其他额外的职责 在业务投放的同时&#xff0c;需要给用户发放红包或者积分&#xff0c;在不改动的投放逻辑的前…

golang实现rpc方法二:使用jsonrpc库【跨平台】

首先在golang实现rpc方法一net/rpc库中实现了RPC方法&#xff0c;但是那个方法不是跨平台的&#xff0c;没法在其他语言中调用这个实现的RPC方法&#xff0c;接下来我们可以通过jsonroc库实现跨语言的RPC方法。俩种实现方式的代码其实也是差不多的&#xff0c;大差不差&#xf…

AcWing 5386. 进水出水问题【线性dp+差值dp】

原题链接&#xff1a;https://www.acwing.com/problem/content/5389/ 某泳池装有 n 个水管&#xff0c;编号 1∼n。 每个水管都是既可用于进水&#xff0c;也可用于出水。 其中&#xff0c;第 i 个水管工作时的单位时间进水或出水量为 ai。 我们希望泳池保持水循环的同时&a…

【机器学习300问】7、怎么进行机器学习?机器学习的基本流程是什么?

一、写在前面 也许你和我一样&#xff0c;在刚开始学习机器学习的基本知识的时候&#xff0c;学到了很多的零碎知识点&#xff0c;无法穿成线织成网&#xff0c;本文是机器学习中提纲挈领的一环&#xff0c;将和你一起将今后所有的知识点都捕捉在这张网中。 当你在问“…

仿stackoverflow名片与b站名片实现(HTML、CSS)

目录 前言一、仿stackoverflow名片HTMLCSS 二、仿b站名片HTMLCSS 素材 前言 学习自ACwing - Web应用课 一、仿stackoverflow名片 HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport&…

BDD(Behavior-Driven Development)行为驱动开发介绍

为什么需要BDD&#xff1f; “开发软件系统最困难的部分就是准确说明开发什么” (“The hardest single part of building a software system is deciding precisely what to build” — No Silver Bullet, Fred Brooks) 。 看一下下面的开发场景&#xff1a; 场景一&#xf…

生成随机id

在Node.js中&#xff0c;你可以使用uuid模块来生成随机的ID。uuid模块提供了多种生成唯一标识符的方法&#xff0c;包括基于时间戳、随机数等不同的算法。 以下是一个简单的示例&#xff0c;演示如何在Node.js中使用uuid模块生成随机ID&#xff1a; 首先&#xff0c;你需 np…

基于TCP的全双工网络编程实践

首先我们先了解一下什么是全双工通信&#xff1f; 全双工数据通信允许数据同时在两个方向上传输&#xff0c;因此&#xff0c;全双工通信相当于是两个单工通信方式的结合&#xff0c;它要求发送设备和接收设备都有独立的接收和发送能力。 TCP服务端代码&#xff1a; #includ…

M-VAE

Word2Vec c(y) 辅助信息 作者未提供代码

音频和视频基础知识

声音 什么是声音&#xff1a; 声音是由物体振动产生的&#xff0c;物体发生振动&#xff0c;对周围的空气产生挤压&#xff0c;从而产生声音。声音是一种压力波&#xff0c;使周围的空气产生疏密变化&#xff0c;形成疏密相间的纵波&#xff0c;由此产生了声波。 声波三要素&…

小程序跳转安卓会跳转两次 iOS不会的解决方案

原因&#xff1a;元素点击事件在子元素上有绑定&#xff0c;父元素上也有绑定会形成冒泡事件&#xff1b; 原生小程序&#xff1a; bind:tap&#xff1a;会冒泡&#xff1b; <view bind:tap"gotoDetail"><image :src"{{ item2.img }}" mode&qu…

HUAWEI华为MateStation S台式机电脑12代PUC-H7621N,H5621N原装出厂Windows11.22H2系统

链接&#xff1a;https://pan.baidu.com/s/1QtjLyGTwMZgYiBO5bUVPYg?pwd8mx0 提取码&#xff1a;8mx0 原厂WIN11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、华为电脑管家等预装程序 文件格式&#xff1a;esd/wim/swm 安装方式&#xf…

dbeaver连接人大金仓报错 can‘t load driver class ‘com.kingbase8.Driver;‘

dbeaver可以连接很多数据库&#xff0c;设置dbeaver连接人大金仓&#xff0c;下载安装完成后&#xff0c;需要自行配置人大金仓的驱动&#xff0c;否则无法连接数据库。 一、dbeaver 下载 dbeaver 下载地址&#xff1a;https://dbeaver.io/download/ 二、查找人大金仓驱动 首…

[含完整代码]Linux使用.sh脚本自动部署(启动|停止|状态|日志)项目[超详细]

前言&#xff1a; 个人博客&#xff1a;www.wdcdbd.com 我们在linux部署.jar项目时&#xff0c;都需要通过java -jar的形式来部署&#xff0c;每次都要手动停止&#xff0c;部署&#xff0c;这样用起来会很麻烦。所以&#xff0c;这篇文章就是自己通过.sh脚本一键启动&#xf…

XCTF:hello_pwn[WriteUP]

使用checksec查看ELF文件信息 checksec 4f2f44c9471d4dc2b59768779e378282 这里只需要注意两个重点&#xff1a; Arch&#xff1a;64bit的文件&#xff0c;后面写exp的重点 Stack&#xff1a;No canary found 没有栈溢出保护 使用IDA对ELF文件进行反汇编 双击左侧的函数栏…

库函数点亮Led

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

陶瓷碗口缺口检测-图像分割

图像分割 由于对碗口进行缺口检测&#xff0c;因此只需要碗口的边界信息。得到陶瓷碗区域填充后的图像&#xff0c;对图像进行边缘检测。这是属于图像分割中的内容&#xff0c;在图像的边缘中&#xff0c;可以利用导数算子对数字图像求差分&#xff0c;将边缘提取出来。 本案…

【算法刷题】总结规律 算法题目第2讲 [234] 回文链表,因为深浅拷贝引出的bug

配合b站视频讲解食用更佳:https://www.bilibili.com/video/BV1vW4y1P7V7 核心提示&#xff1a;好几道题是处理有序数组的&#xff01; 适合人群&#xff1a;考研/复试/面试 解决痛点&#xff1a;1. 刷了就忘 2.换一道相似的题就不会 学完后会输出&#xff1a;对每类题目的框架…