Python中类的继承细讲
创始人
2025-05-28 13:25:52
0

文章目录

  • 前言
  • 一、继承的基本语法
  • 二、方法重写
  • 三、派生类中调用基类的 _ _init _ _() 方法


前言

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


一、继承的基本语法

  继承面向对象编程最重要的特性之一,它源于人们认识客观世界的过程,是自然界普遍存在的一种现象。例如,我们每一个人都从祖辈和父母那里继承了一些体貌特征,但是每个人却又不同于父母,因为每个人都存在自己的一些特性,这些特性是独有的,在父母身上并没有提现。在程序设计中实现继承,表示这个类拥有它继承的类的所有公有成员或者受保护成员。在面向对象编程中,被继承的类称为父类或基类新的类称为子类或者派生类
  通过继承不仅可以实现代码的重用,还可以通过继承来理顺类与类之间的关系。在 Python 中,可以在类定义语句中,类名右侧使用一对小括号将要继承的基类名称括起来,从而实现类的继承。具体的语法格式如下:

class ClassName(baseclasslist): '''类的帮助信息'''  # 类文档字符串statement  # 类体

参数说明

  • ClassName:用于指定类名。
  • baseclasslist:用于指定要继承的基类,可以有多个,类名之间用逗号 “,” 分隔。如果不指定,将使用所有 Python 对象的基类 object
  • ‘’‘类的帮助信息’‘’:用于指定类的文档字符串,定义该字符串后,在创建类的对象时,输入类名和左侧的括号 “(” 后,将显示该信息。
  • statement:类体,主要由类变量(或类成员)、方法和属性等定义语句组成。如果在定义类时,没想好类的具体功能,也可以在类体中直接使用 pass 语句代替。

  例如,定义一个水果类 Fruit(作为基类),并在该类中定义一个类属性(用于保存水果默认的颜色)和一个 harvest() 方法,然后创建 Banana 类和 Grape 类,都继承自 Fruit 类,最后创建 Banana 类和 Grape 类的实例,并调用 harvest() 方法(在基类中编写),代码如下:

class Fruit:  # 定义水果类(基类)color = '绿色'  # 定义类属性def harvest(self, color):print('水果是{}的'.format(color))  # 输出的是形式参数colorprint('水果已经收获......')print('水果原来是{}的'.format(Fruit.color))  # 输出的是类属性color
class Banana(Fruit):  # 定义香蕉类(派生类)color = '黄色'def __init__(self):print('我是香蕉')
class Grape(Fruit):  # 定义葡萄类(派生类)color = '紫色'def __init__(self):print('我是葡萄')
banana = Banana()  # 创建类的实例(香蕉)
banana.harvest(banana.color)  # 调用基类的harvest()方法
grape = Grape()  # 创建类的实例(葡萄)
grape.harvest(grape.color)  # 调用基类的harvest()方法

  执行上面代码,将显示如下图所示结果:

在这里插入图片描述

  从运行结果中可以看出,虽然在 Banana 类和 Grape 类中没有 harvest() 方法,但是 Python 允许派生类访问基类的方法


二、方法重写

  基类的成员都会被派生类继承,当基类中的某个方法不完全适用于派生类时,就需要在派生类中重写父类的这个方法。
  在上面的实例代码中,基类里面定义的 harvest() 方法,无论派生类是什么水果都显示 “水果…”,而没有将水果的名字显示上去,如下图所示:

在这里插入图片描述

  如果想要针对不同水果给出不同的提示,可以在派生类中重写 harvest() 方法。代码如下:

class Fruit:  # 定义水果类(基类)color = '绿色'  # 定义类属性def harvest(self, color):print('水果是{}的'.format(color))  # 输出的是形式参数colorprint('水果已经收获......')print('水果原来是{}的'.format(Fruit.color))  # 输出的是类属性color
class Banana(Fruit):  # 定义香蕉类(派生类)color = '黄色'def __init__(self):print('我是香蕉')def harvest(self, color):print('香蕉是{}的'.format(color))  # 输出的是形式参数colorprint('香蕉已经收获......')print('香蕉原来是{}的'.format(Fruit.color))  # 输出的是类属性color
banana = Banana()  # 创建类的实例(香蕉)
banana.harvest(banana.color)  # 调用基类的harvest()方法

  运行上面代码后,结果显示如下:

我是香蕉
香蕉是黄色的
香蕉已经收获......
香蕉原来是绿色的

三、派生类中调用基类的 _ _init _ _() 方法

  在派生类中定义 _ _ init _ _() 方法时,不会自动调用基类的 _ _ init _ _() 方法。例如,定义一个 Fruit 类,在 _ _ init _ _() 方法中创建类属性 color,然后在 Fruit 类中定义一个 harvest() 方法,在该方法中输出类属性 color 的值,再创建继承自 Fruit 类的 Banana 类,最后创建 Banana 类的实例,并调用 harvest() 方法,代码如下:

class Fruit:  # 定义水果类(基类)def __init__(self, color = '绿色'):Fruit.color = color  # 定义类属性def harvest(self):print('水果原来是{}的'.format(Fruit.color))  # 输出的是类属性color
class Banana(Fruit):  # 定义香蕉类(派生类)def __init__(self):print('我是香蕉')
banana = Banana()  # 创建类的实例(香蕉)
banana.harvest()  # 调用基类的harvest()方法

  执行上面代码后,将显示如下图所示的异常信息。

在这里插入图片描述

  因此,要让派生类调用基类的 _ _ init _ _() 方法进行必要的初始化,需要在派生类使用 super() 函数调用基类的 _ _ init _ _() 方法,用法格式如下:

super()._ _init_ _([参数1, ....])

注意:如果基类的初始化方法中有参数传入,则这里需要在 _ _init_ _() 括号中写入形式参数

  在上面代码中加入 super()._ _ init _ _() 之后,代码及运行结果如下图所示:

在这里插入图片描述

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...