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,一经查实,立即删除!

相关文章

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

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

手机怎么用代理ip上网

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

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

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

云动态摘要 2024-07-12

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

Vue3 markRaw的使用

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

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

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

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

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

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

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

虚拟机vmware网络设置

一、网络分类 打开vmware workstation网络编辑器可以知道有三种网络类型,分别是:桥接模式、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…

ST Smart Things Sentinel:一款针对复杂IoT协议的威胁检测工具

关于ST Smart Things Sentinel ST Smart Things Sentinel&#xff0c;简称ST&#xff0c;是一款功能强大的安全工具&#xff0c;广大研究人员可以使用该工具检测物联网 (IoT) 设备使用的复杂协议中的安全威胁。 在不断发展的联网设备领域&#xff0c;ST Smart Things Sentinel…

matlab入门学习

一、什么是matlab MATLAB&#xff08;matrix laboratory矩阵实验室&#xff09;是一款商用数学软件&#xff0c;主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。可用于数据分析、深度学习、图像处理与计算机视觉、量化金融与风险管理等领域。 二、matlab和pyt…

WEB07Vue+Ajax

1. Vue概述 Vue&#xff08;读音 /vjuː/, 类似于 view&#xff09;&#xff0c;是一款用于构建用户界面的渐进式的JavaScript框架&#xff08;官方网站&#xff1a;https://cn.vuejs.org&#xff09;。 在上面的这句话中呢&#xff0c;出现了三个词&#xff0c;分别是&#x…

宝兰德参编金融智能体标准,深耕大模型场景化落地

随着数智化浪潮的不断推进&#xff0c;人工智能技术正深刻影响着金融服务的模式和流程&#xff0c;金融智能体在大模型的加持下&#xff0c;业务场景的应用能力得到强化。然而&#xff0c;作为新型技术&#xff0c;金融智能体在隐私保护、透明性、数据泄露等方面仍存在诸多风险…

枸杞糖基转移酶--文献精读31

Functional and structural dissection of glycosyltransferases underlying the glycodiversity of wolfberry-derived bioactive ingredients lycibarbarspermidines 功能和结构分析导致枸杞来源的生物活性成分&#xff08;如lycibarbarspermidines类化合物&#xff09;糖基…

C++入门基础知识2

1.引用 1.1引用的使用 1.引用在实践中主要是引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被引用对象 2.引用传参跟指针传参功能是类似的&#xff0c;引用传参相对更方便一些 3.引用和指针在实践中相辅相成&#xff0c;功能有重叠性&#xff0c;各有特…

嵌入式C++、Qt/QML和MQTT:智能工厂设备监控系统的全流程介绍(附代码示例)

1. 项目概述 本项目旨在开发一套先进的智能工厂设备监控系统&#xff0c;集成嵌入式技术、工业通信协议和人机界面等多项技术&#xff0c;实现对工厂设备的全方位实时监控、高精度数据采集和智能化分析。该系统将显著提升工厂设备的运行效率&#xff0c;大幅降低维护成本&…

基于AT89C51单片机的16×16点阵LED显示器字符滚动显示设计(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机的1616点阵LED显示器字符滚动显示设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 仿真效果图 仿真图 代码 系统论文 资源下载 设计的内容和要求 熟悉51系…