Python类与对象02:继承

1、什么是继承

上一节中我们介绍了类与对象的用法。类可以看作是一种程序内的设计图纸,而对象则是基于这个图纸制造出来的实体。这个过程类似于现实中的设计表格和填写表格。

现在假设你是一名设计师,需要迭代一款新产品。你有两个选择:

  1. 在现有图纸的基础上进行改进,得到新的图纸。
  2. 从头开始设计全新的图纸。

大多数情况下,你会选择在现有图纸的基础上修修改改。这种方法更高效,因为你可以重用已有的设计,减少重复工作。

在编程中,“继承”就是这个意思。继承允许你从一个已有的类中继承所有的方法和属性,然后在此基础上进行改进,生成一个新的类。这种方式让代码更具复用性,也更易于维护和扩展。

2、继承的语法和实例

2.1单继承

首先,我们介绍继承的语法。假设代码之前已经有创建好的类:

class 类名(父类名):类的内容体

这段代码的意思是在父类(原先创建好的类)的基础上创建一个新的类,新的类继承了父类的所有成员变量成员方法(属性和行为)。 是不是很简单?让我们来看一个例子。

原先的手机只有4G通话模式,随着科技发展,现在5G通话已经普及。那么我们就在原先手机类的基础上上,运用继承的方法创建一个现在手机的类:

class phone_original:producer='华为'def call_by_4g(self):print('开启4g通话模式')class phone_2024(phone_original):def call_by_5g(self):print('开启5g通话模式')phone=phone_2024()
print(phone.producer)
phone.call_by_5g()
phone.call_by_4g()

创建好后,我们用phone接受phone_2024,并调用call_by_4g和call_by_5g两个成员方法,打印父类属性,输出结果如图:

 

很显然,新的类继承了父类的成员方法 和成员属性。

由于新的类只继承了一个父类,所以这种继承方式就是单继承。

2.2多继承

多继承顾名思义,就是新的类继承了多个父类。语法相同,让我们再用一个例子实现一下:

如今手机的功能不仅有通话,还可以作为控制智能家居的开关,小区门禁的钥匙,汽车的钥匙,让我们用多继承的方法创建一个新的类,继承父类的成员变量和成员方法:

class phone:  # 定义一个名为 phone 的类,表示手机ID = 1001  # 类属性,表示手机的IDproducer = '华为'  # 类属性,表示手机的生产厂家def call_by_5g(self):  # 定义一个方法,用于5G通话print('开始5g通话')  # 输出 '开始5g通话'class house_controller:  # 定义一个名为 house_controller 的类,表示家电控制器def open_fridge(self):  # 定义一个方法,用于打开冰箱print('打开冰箱')  # 输出 '打开冰箱'def open_TV(self):  # 定义一个方法,用于打开电视print('打开电视')  # 输出 '打开电视'class car_key:  # 定义一个名为 car_key 的类,表示车钥匙def open_door(self):  # 定义一个方法,用于打开车门print('打开车门')  # 输出 '打开车门'class myphone(phone, house_controller, car_key):  # 定义一个名为 myphone 的类,继承了 phone, house_controller 和 car_key 类pass  # 占位语句,表示类体为空phone = myphone()  # 创建 myphone 类的实例对象
phone.call_by_5g()  # 调用 myphone 对象的 call_by_5g 方法,输出 '开始5g通话'
phone.open_fridge()  # 调用 myphone 对象的 open_fridge 方法,输出 '打开冰箱'
phone.open_TV()  # 调用 myphone 对象的 open_TV 方法,输出 '打开电视'
print(f'ID是{phone.ID}')  # 输出 'ID是1001'

注释内容已经很详细地解释了代码,代码运行输出如下。 

 

2.3继承的总结

1、语法:

 class 类名(父类名):
    类的内容体

2、单继承与多继承

(1):单继承是一个类继承另一个类

(2):多继承是一个类继承多个类,按照顺序从左向右依次继承

3、pass关键字:

pass是占位语句,不实现任何功能

3、 复写和使用父类成员

3.1复写父类成员的语法

子类继承父类成员的方法后如果”不满意“,那么可以进行复写。语法是再子类中重新定义同名的属性或方法。

我们还是以4g通话为例。例如,我们现在不满意父类的成员属性和成员方法,可以对其进行复写:

class original_phone:price=3000def call_by_4g(self):print('父类进行4g通话')class phone_2024:price=5000def call_by_4g(self):print('子类进行4g通话')phone=phone_2024()
phone.call_by_4g()
print(f'价格是{phone.price}')

 

根据打印结果我们可以发现复写后的内容覆盖了原先父类的成员属性和成员方法。

3.2父类成员的使用

一旦复写父类成员,那么类对象调用成员时就会调用复写后的新成员,如果需要使用被复写的父类成员则需要特殊的调用方式:

方式(1)

1、使用成员变量:父类名.成员变量

2、使用成员方法:父类名.成员方法(self)

方式(2)

1、使用成员变量:super( ).成员变量

2、使用成员方法:super( ).成员方法

我们来看这样一段代码:

class phone:ID=Noneproducer='华为'def call_by_5g(self):print('使用5g通话')class myphone(phone):producer='小米'def call_by_5g(self):print('开启单核模式')print('使用5g通话')print('关闭单核,确保性能')phone=myphone()
phone.call_by_5g()

my_phone中复写了父类的成员方法call_by_5g( )。现在想让代码打印父类的厂商,并使用父类的成员方法打印”使用5g通话“。 代码可以这样写:

class phone:ID=Noneproducer='华为'def call_by_5g(self):print('使用5g通话')class myphone(phone):producer='小米'def call_by_5g(self):print('开启单核模式')super().call_by_5g()print('关闭单核,确保性能')print(f'父类厂商是{super().producer}')phone=myphone()
phone.call_by_5g()

 

 

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

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

相关文章

[Vue3 + TS + Vite] 将带有HTML样式的文本复制到剪切板

换行分割&#xff1a;硬回车 const copyToClipboardWithStyles async (html: string) > {const modifiedHtml html.replace(/\n/g, <br>).replace(/ /g, )const item new ClipboardItem({text/html: new Blob([modifiedHtml], { type: text/html }),text/plain: …

我的六天C++外出学习记

第一天 7月7日 星期日 早晨&#xff0c;我早早起来了&#xff0c;穿好衣服吃完饭就出发了。 我从家到学校用了1H&#xff0c;迟到了&#xff01;我急急忙忙去报到。 我们中午和晚上的饭菜虽说有点贵&#xff0c;但实在太美味了&#xff0c;和我们原本初中的饭菜相比&#…

【Flask项目】文件分享系统(一)

前言 笔者之前自学了下Python的轻量级Web框架Flask&#xff0c;学编程大家都知道&#xff0c;不动手实操都是假把式&#xff0c;这样造成的结果就是&#xff0c;你觉得看懂了&#xff0c;也听会了&#xff0c;但是让你自己开做个工具或项目&#xff0c;就是无从下手。因此&…

ACE之ACE_Time_Value

简介 ACE_Time_Value在ACE中表示时间&#xff0c;集成不同平台的时间 结构 #mermaid-svg-dGoKn1R7GicabUif {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dGoKn1R7GicabUif .error-icon{fill:#552222;}#mermaid-…

手机怎么用代理ip上网

在数字化时代&#xff0c;网络已经成为我们生活中不可或缺的一部分。然而&#xff0c;有时候出于安全、隐私或访问特定网络资源的需要&#xff0c;我们可能需要使用代理IP来上网。那么&#xff0c;什么是代理IP&#xff1f;如何在手机上设置并使用它呢&#xff1f;本文将为您详…

国内Ubuntu安装 stable-diffusion教程,换成国内镜像

安装依赖&#xff1a; 首先更新系统并安装Python 3.10和pip&#xff1a; sudo apt update sudo apt install python3.10 python3-pip 设置Python虚拟环境&#xff08;可选&#xff09;&#xff1a; 安装Python虚拟环境管理工具&#xff0c;并创建激活虚拟环境&#xff1a; su…

AI绘画,Stable Diffusion姓氏头像副业拆解,操作简单,小白也能轻松上手!

前言 嗨&#xff0c;我是月月。 说时候&#xff0c;现在副业项目层出不穷&#xff0c;但要找到一个操作简单、收益可观且具有长期潜力的项目并不容易。 今天&#xff0c;我为大家推荐一个当下非常火爆的副业项目——AI定制百家姓氏头像。这不仅是一个热门项目&#xff0c;更…

Java调用py或者exe文件实现word转PDF

前言 有次上班时小伙伴和我吐槽Java实现word转pdf太麻烦&#xff0c;我灵机一动Java调用python&#xff0c;python实现转换操作不就行了。 开发环境 Java&#xff1a;JDK1.8 python&#xff1a;3.12 代码 import docx2pdf import sys import glob import osdef w2ps(d):word…

云动态摘要 2024-07-12

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起! [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造,可通过对话方式生成可视化…

vue-ref与reactive

ref ref所创建的对象本身不具有响应性&#xff0c;而是将内部值包装在特殊对象中&#xff0c;通过.value访问响应对象。在模板中使用ref时&#xff0c;不需要加.value&#xff0c;会自动解包。ref可以为对象和非对象的普通变量增加响应性。&#xff08;如果是对象用proxy包装再…

Vue3 markRaw的使用

markRaw 作用:将一个对象标记为不可以被转化为代理对象。返回该对象本身。 应用场景: 1.有些值不应被设置成响应式时,例如复杂的第三方类库等 2.当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能 3.在动态渲染组件的时候我们就可以使用 markRaw 包裹。markRaw 的…

Chromium实用技巧篇-如何下载指定版本的Chromium(一)

1. 引言 随着互联网技术的不断发展&#xff0c;网络浏览器已经成为我们日常生活中不可或缺的一部分。作为一款开源浏览器项目&#xff0c;Chromium不仅为Google Chrome提供了坚实的基础&#xff0c;也为其他许多浏览器提供了技术支持。如果您希望体验最前沿的浏览器功能或参与开…

一个很变态但是有用的变现手段:用AI技术搞电商模特图,接单接到手软~

前言 今天带大家拆解一个特别有趣的项目&#xff0c;必须得跟大家分享一下&#xff1a;用AI技术搞电商模特图。 是不是感觉挺科幻的&#xff1f;但这真不是科幻小说里的情节&#xff0c;而是咱们现实生活中已经实现的事情。 想想看&#xff0c;咱们平常在网上看到的那些漂亮…

vue-模板引用

官网原文&#xff1a; 虽然 Vue 的声明性渲染模型为你抽象了大部分对 DOM 的直接操作&#xff0c;但在某些情况下&#xff0c;我们仍然需要直接访问底层 DOM 元素。要实现这一点&#xff0c;我们可以使用特殊的 ref attribute&#xff1a; <input ref"input">…

网络基础知识--网络硬件设备介绍(含eNSP模拟器命令使用)

华为 eNSP 模拟器安装教程可参考&#xff1a;华为 eNSP 模拟器安装教程&#xff08;内含下载地址&#xff09;_ensp下载-CSDN博客 华为eNSP&#xff08;Enterprise Network Simulation Platform&#xff09;模拟器是一款由华为提供的免费网络仿真平台&#xff0c;主要用于模拟和…

虚拟机vmware网络设置

一、网络分类 打开vmware workstation网络编辑器可以知道有三种网络类型&#xff0c;分别是&#xff1a;桥接模式、nat模式、仅主机模式。 1、桥接模式 桥接模式是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下, 类似于把物理主机虚拟为一个交换机, 所有设…

【Wamp】局域网设备访问WampServer | 使用域名访问Wamp | Wamp配置HTTPS

局域网设备访问WampServer 参考&#xff1a;https://www.jianshu.com/p/d431a845e5cb 修改Apache的httpd.conf文件 D:\Academic\Wamp\program\bin\apache\apache2.4.54.2\conf\httpd.conf 搜索 Require local 和Require all denied&#xff0c;改为Require all granted <…

分布式系统中雪花ID的使用及前后台精度解决

本文介绍了雪花ID的应用场景&#xff0c;以及针对雪花id生成精度过大导致数据缺失的解决方案。 一、概念 雪花 ID是一种分布式 ID 生成策略&#xff0c;保证全局唯一&#xff0c;位数组成中含有时间戳&#xff0c;相比UUID,故也能保证自增。 二、应用场景 分库、分表、分片、…

【windows OBS开启直播】Windows搭建RTMP视频流服务(Nginx服务器版)

如果您想在windows 电脑上设置RTMP服务器&#xff0c;并使用VLC播放器播放OBS的直播流&#xff0c;您可以使用一个本地的RTMP服务器软件&#xff0c;如nginx配合nginx-rtmp-module来搭建。下面 详细介绍下如何搭建此视频流服务。 1、安装和配置本地RTMP服务器 步骤1&#xff…

MyBatis(40)使用 MyBatis 时,事务管理的常见问题有哪些,如何解决

在使用MyBatis进行事务管理时&#xff0c;开发者可能会遇到多种问题&#xff0c;这些问题通常涉及事务的边界定义、事务的传播行为、以及事务的一致性等方面。下面&#xff0c;我们将深入探讨这些常见问题及其解决方案&#xff0c;并结合源码和代码示例进行详细解析。 1. 事务…