Python零基础从小白打怪升级中~~~~~~~Python面向对象(二)

第九节:Python面向对象——继承和多继承

一、继承

Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和函数。

在Python中,所有类默认继承object类,object类是顶级类或基类;

1、单继承

image.png

class Fruit:color = '绿色'def harvest(self, color):print(f"水果是:{color}的!")print("水果已经收获...")print(f"水果原来是{Fruit.color}的!")class Apple(Fruit):color = "红色"def __init__(self):print("我是苹果")class Orange(Fruit):color = "橙色"def __init__(self):print("\n我是橘子")apple = Apple()  # 实例化Apple()类
apple.harvest(apple.color)  # 在Apple()中调用harvest函数,并将Apple()的color变量传入
orange = Orange()
orange.harvest(orange.color)  # 在Orange()中调用harvest,并将Orange()的color变量传入

在编写类时,并不是每次都要从空白开始。当要编写的类和另一个已经存在的类之间存在一定的继承关系时,就可以通过继承来达到代码重用的目的,提高开发效率。

2、函数的重写

父类(被继承的类)的函数都会被子类(继承的新类)继承,当基类(父类)中的某个函数不完全适用于子类时,就需要在子类中重写父类的这个函数。 而且函数的名字必须一模一样。


#父类
class Person:def __init__(mysillyobject, firstname, lastname):mysillyobject.name = firstnamemysillyobject.family = lastnamedef myfunc(abc):print("Hello my name is " + abc.name)#子类,继承
class Student(Person):def __init__(self, fname, year, lname):super().__init__(fname, lname) # 调用父类的属性赋值函数self.graduationyear = year  #子类自己的属性def welcome(self):#子类自己的函数print("Welcome", self.name, self.family, "to the class of", self.graduationyear)x = Student("Elon", 2019, "Musk")
x.welcome(

Python 还有一个 super() 函数,通过使用 super() 函数,在重写父类函数时,让super().调用在父类中封装的函数.

如果在开发中,子类的函数中包含父类的函数,父类原本的函数是子类函数的一部分,就可以采用扩展的方式。

扩展的方式步骤:

  1. 在子类中重写父类的函数
  2. 在需要的位置使用 super().父类函数 来调用父类函数的执行
  3. 代码其他的位置针对子类的需求,编写子类特有的代码实现

二、多继承

image.png

在python中是可以多继承的,继承的先后顺序是有区别的,当我们调用函数的时候,如果第一个继承的找不到,才会去第二个中找,但是只要在第一个类中找到调用的那个函数,即使参数个数不匹配也不会调用第二个父类中的,此时会报错。

MRO顺序:Python官方采用了一个算法将复杂结构上所有的类全部都映射到一个线性顺序上,而根据这个顺序就能够保证所有的类都会被构造一次。

类名字.__mro__

三、私有属性和函数

在Python中,可以为实例属性和函数设置私有权限,即设置某个实例属性或实例函数不继承给子类。甚至,不能在类的外部调用和访问

设置私有权限的方法:在属性名和函数名 前面 加上两个下划线 __。

如果也想要别人去访问和修改私有属性,在Python中,一般定义函数名 get_xx用来获取私有属性,定义 set_xx用来修改私有属性值。

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

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

相关文章

Node.js安装与配置:构建强大的JavaScript后端应用程序

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,它使得我们可以使用JavaScript构建高性能的后端应用程序。无论你是初学者还是有经验的开发者,了解如何正确安装和配置Node.js都是非常重要的。本文将介绍如何安装和配置Node.js,以及一…

Linux - 线程

目录 一.Linux线程的概念 1.1什么是线程 1.2 线程的优点 1.3 线程的缺点 1.4 线程异常 1.5 线程用途 二. Linux进程VS线程 2.1 进程和线程 三. Linux线程控制 3.1 POSIX线程库 3.2 创建线程 3.3 进程ID和线程ID 3.4 线程ID及进程地址空间布局 3.5 线程终止 3.6 线…

实战小项目 | ESP32-S3和ESP32-C3通过ESP-Mesh-Lite组网 温湿度传感器案例

传统Wi-Fi网络所有终端设备都需要直接与路由器相连,这使得Wi-Fi的覆盖区域受到路由器位置的限制,可接入终端设备的数量也受到路由器容量的限制。而乐鑫ESP-Mesh-Lite Wi-Fi组网方案,所有终端设备都可以与相邻设备连接,摆脱了对路由…

移动硬盘盒支持PD充电:优势解析与实际应用探讨

随着科技的飞速发展,数据存储和传输的需求日益增长,移动硬盘盒作为便携式存储设备的重要载体,其功能和性能也在不断提升。近年来,越来越多的移动硬盘盒开始支持PD(Power Delivery)充电技术,这一…

9.Hexo通过partial文件传值和改变CSS属性

partials 基本上是可以在自己的HTML文件或.ejs文件中定义网站中不同组件的方法 如果想要为网站定义一个标头,这个标头将会很好地出现在网站的每个页面上 用partials可以创建一个.ejs文件,可以将该标头的所有代码存储在该文件中,然后当想要在…

记一次奇妙的某个edu渗透测试

前话: 对登录方法的轻视造成一系列的漏洞出现,对接口确实鉴权造成大量的信息泄露。从小程序到web端网址的奇妙的测试就此开始。(文章厚码,请见谅) 1. 寻找到目标站点的小程序 进入登录发现只需要姓名加学工号就能成功…

BIT-6-C语言文件操作(C语言进阶)

本章重点 为什么使用文件什么是文件文件的打开和关闭文件的顺序读写文件的随机读写文本文件和二进制文件文件读取结束的判定 文件缓冲区 1. 为什么使用文件 我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增…

程序员应该遵守的 10 个编程原则

程序员应该遵守的编程原则 程序员拥有一个较好的编程原则能使他的编程能力有大幅的提升,可以使其开发出维护性高、缺陷更少的代码。以下内容梳理自StactOverflow的一个问题:编程时你最先考虑的准则是什么? 目录 Toggle KISS(Keep …

PaddleOCR训练自己模型(2)----参数配置及训练

一、介绍 paddleocr分为文字定位(Det)和文字识别(Rec)两个部分 二、定位模型训练 (1)Det预训练模型下载:https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_train.tar (2)下载完之后,…

基于zookeeper安装Kafka集群

操作系统:centOS 9 Stream,6台,基于vmware虚拟机创建 准备工作 确认系统环境: 确保所有服务器已安装了最新更新。安装Java Development Kit (JDK) 8或更高版本,因为ZooKeeper和Kafka都是基于Java开发的。例如&#x…

如何解决集群部署环境下 Session 不共享的问题

在集群部署环境中,Session 不共享的问题通常是因为HTTP协议本身是无状态的,服务器之间无法自动传递和同步用户会话信息。当用户从集群中的一个节点跳转到另一个节点时,原先节点上的Session数据无法在新的节点上获取,从而导致登录状…

mac dex2jar安装

如果你在终端中收到 “zsh: command not found: dex2jar” 的消息,这意味着 dex2jar 工具没有安装在你的系统中,或者没有被添加到系统的 PATH 环境变量中。为了解决这个问题,你需要按照以下步骤操作: 下载 dex2jar: 前…

【探索人工智能】我与讯飞星火认知大模型的对话

文章目录 讯飞星火认知大模型的地址概要讯飞星火认知大模型的发展历程讯飞星火认知大模型的主页利用讯飞星火大模型解决一些基本的数学问题讯飞星火认知大模型与OpenAI,ChatGPT没有关系!让讯飞星火认知大模型编写传奇代码hello world小结 讯飞星火认知大模型的地址 …

文献速递:深度学习胰腺癌诊断--胰腺癌在CT扫描中通过深度学习检测:一项全国性的基于人群的研究

Title 题目 Pancreatic Cancer Detection on CT Scans with Deep Learning: A Nationwide Population-based Study 胰腺癌在CT扫描中通过深度学习检测:一项全国性的基于人群的研究 01 文献速递介绍 胰腺癌(PC)的五年生存率是所有癌症中…

C语言数组相关练习题

1. 求数组中第二大的值 #include <stdio.h>int main() {int arr[] {12, 97, 1, 5};int len sizeof(arr) / sizeof(arr[0]);// printf("%d\n",len); // 9// 冒泡排序(从小到大)for (int i 0; i < len; i){for (int j 0; j < len - i - 1; j){// prin…

今天你卷了吗?

什么是卷&#xff1f; 高考的地狱模式是卷。100个人录取30个。再怎么努力也只有30个。反过来大家如果都不努力也录取30个。 日常加量不加价的工作是卷。互联网公司就是1个人拿2个人的薪酬做3个人的事情。但是非互联网公司&#xff0c;一个人做2个人的事情还是3个人的事情拿的…

transformer上手(8)—— 序列标注任务

序列标注 (Sequence Labeling/Tagging)&#xff0c;其目标是为文本中的每一个 token 分配一个标签&#xff0c;因此 Transformers 库也将其称为 token 分类任务。常见的序列标注任务有命名实体识别 NER (Named Entity Recognition) 和词性标注 POS (Part-Of-Speech tagging)。 …

FianlShell搭建vulhub

下载docker-ce的yum源 sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装Docker sudo yum -y install docker-ce 检查Docker是否安装成功 sudo docker -v 安装docker-compose 安装工具源 sudo yum…

【蓝桥杯嵌入式】串口通信与RTC时钟

【蓝桥杯嵌入式】串口通信与RTC时钟 串口通信cubemx配置串口通信程序设计 RTC时钟cubemx配置程序设计 串口通信 cubemx配置 打开串口通信&#xff0c;并配置波特率为9600 打开串口中断 重定义串口接收与发送引脚&#xff0c;默认是PC4&#xff0c;PC5&#xff0c;需要改为P…

【高电压?高电流?未来新能源汽车充电技术如何选择?】

近几年油车电车车主在网上争吵的点无非就是几个&#xff1a;成本问题、续航问题、技术成熟度和安全问题以及加油和充电的等待时间问题&#xff0c;我们知道&#xff0c;传统的燃油车在加油站加满油只需要几分钟&#xff0c;这与电动车充满电的速度形成鲜明对比&#xff0c;最早…