Python类的继承
Python类的继承
- 一、前言
- 二、继承的基本语法
- 三、方法重写
- 四、派生类中调用基类的__init__()方法
一、前言
在编写类时,并不是每次都要从空白开始。当要编程的类和另外一个已经存在的类直接存在一定的继承关系时,就可以通过继承来达到代码重用的目的,提高开发效率。下面将介绍如何在Python中实现继承。
二、继承的基本语法
继承是面向对象编程最重要的特征之一,它源于人们认识客观世界的过程,是自然界普遍存在的一种现象。例如,我们每一个人都从祖辈和父母哪里继承了一些体藐特征,但是每个人却又不同于父母,因为每个人身上都存在自己的一些特性,这些特性是独有的,在父母身上并没有体现。在程序设计中实现继承,表示这个类拥有它继承的类的所有公有成员或者受保护成员。在面向对象编程中,被继承的类称为父类或基类,新的类称为子类或派生类。
通过继承不仅可以实现代码的重用,还可以通过继承来理顺类与类之间的关系。在Python中,可以在类定义语句中,类名右侧使用一对小括号将要继承的基类名称括起来,从而实现类的继承。具体语法如下:
class ClassName(baseclasslist):"""类的帮助信息""" # 类的文档字符串statement # 类体
参数说明:
- ClassName:用于指定类名
- baseclasslist:用于指定要继承的基类,可以有多个,类名之间用逗号“,”隔开。如不指定,将使用所有Python对象的根类object
- “”“类的帮助信息”“”:用于指定类的文档字符串,定义该字符串后,在创建类的对象时,输入类名和左侧的括号“(”后,将显示信息
- statement:类体,主要由类变量(或类成员)、方法、属性等定义语句组成。如果定义类时,没有想好类的具体功能时,可以在类体中直接使用Pass语句代替。
三、方法重写
基类的成员都会被派生类继承,当基类中的某个方法不完全适用于派生类时,就需要在派生类中重写父类的这个方法,这和Java语言中直接使用pass语句代替。
例如,定义一个Fruit水果类,该类中定义一个harvest()方法,无论派生类是什么水果都将显示“水果…”,如果想要针对不同的水果给出不同的提示,可以在派生类中重写harvest()方法。例如,在创建派生类Orange时,重写harvest()方法,代码如下:
class Fruit: # 定义水果基类color = "绿色" # 定义类属性def harvest(self, color):print("水果是:" + color + "的") # 输出形式参数print("水果已经收获......")print("水果原来是:" + Fruit.color + "的") # 输出类属性colorclass Orange(Fruit): # 定义橘子类(派生类)color = "橙色"def __init__(self):print("\n我是橘子")def harvest(self, color):print("橘子是:" + color + "的") # 输出形式参数print("橘子已经收获......")print("橘子原来是:" + Fruit.color + "的") # 输出类属性color
四、派生类中调用基类的__init__()方法
在派生类中定义__init__()方法时,不会自动调用基类的__init__()方法。例如,定义一个Fruit类,在__init__()方法中创建类属性color,然后在Fruit类的Apple类,最后创建Apple类的实例,并调用harvest()方法,代码如下:
class Fruit: # 定义水果基类def __init__(self, color="绿色"):Fruit.color = color # 定义类属性def harvest(self):print("水果原来是:" + Fruit.color + "的") # 输出类属性colorclass Apple(Fruit): # 定义苹果类(派生类)def __init__(self):print("我是苹果")apple = Apple() # 创建类的实例(苹果)
apple.harvest() # 调用基类的harvest()方法
执行上面代码后,将显示如图所示的异常信息:
因此在派生类中使用基类的__init__()方法,必须要进行初始化,即需要在派生类中使用super()函数调用基类的__init__()方法。例如,将上面代码进行修改,代码如下:
class Fruit: # 定义水果基类def __init__(self, color="绿色"):Fruit.color = color # 定义类属性def harvest(self):print("水果原来是:" + Fruit.color + "的") # 输出类属性colorclass Apple(Fruit): # 定义苹果类(派生类)def __init__(self):print("我是苹果")super().__init__() # 调用基类的__init__()方法apple = Apple() # 创建类的实例(苹果)
apple.harvest() # 调用基类的harvest()方法
执行上面代码,将显示以下内容:
Python类的继承相关推荐
- 关于python类的继承正确的说法是_2017美团点评的运维岗校招笔试题,测测你会几题?...
原标题:2017美团点评的运维岗校招笔试题,测测你会几题? 1.数据库:以下哪项不是HASH索引的特征? A MySQL不能确定在两个值之间大约有多少行 B 不能使用hash索引来加速ORDER BY ...
- 一文讲透python类的继承原理,好比调制鸡尾酒
python类继承的原理 python类继承的原理,大家完全可以将其想象为调鸡尾酒,就是电视上调酒师拿着一个杯子甩来甩去的跟扔印度飞饼一样的那种,我们不难发现,调鸡尾酒会用很多的原材料来勾兑(至于严格 ...
- python一个类继承多个类_如何让Python继承多个类?一文读懂Python类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过Python类的继承并且在此基础上衍生出让Python继承多个类的方法. 通过Python类的继承创建的新类称为子类或派生类, ...
- python 类的继承,类中的函数调用以及类输入数组
第一部分,类的继承 先给出一个例子: class People(): #定义类,要大写,python 2中要在括号里加如object这个单词def __init__(self,n,a,w): #定义一 ...
- python类与继承person类_关于python中类的继承及self
关于python中类的继承及self 如下,如果调用student类,则可以正常运行,但是如果去掉consumer.__init__(self, fee)中的self,将其改成consumer.__i ...
- Python 类的继承和组合
面向对象的编程带来的主要好处之一是代码的复用,实现这种复用的方法之一是通过继承机制. python中解决代码复用的方式:继承和组合. 1 什么是继承 继承是一种创建类的方法,在python中,一个类可 ...
- python 优先级继承_孤荷凌寒自学python第二十二天python类的继承
(完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自类A,意味着类B的内部代码块中就算不写任何代码,类B仍然 ...
- 关于python类的继承正确的说法是_关于python类的继承的一个小坑
我们来看看一个很普通的类的继承: class Model: name = "DNN" def __init__(self, name): self.name = name def ...
- python类的继承关系,python——类和类之间的关系(继承多态)
1.类和类之间的关系有三种:is-a.has-a和use-a关系. is-a关系也叫继承或泛化,比如学生和人的关系.手机和电子产品的关系都属于继承关系. has-a关系通常称之为关联,比如部门和员工的 ...
- python类的继承优缺点_python 类的三大特性--继承
继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题, 继承是一种创建新类的方式,在python中新建的类可以继承一个或多个父类,父 ...
最新文章
- Poj_1274 The Perfect Stall -二分图裸题
- 数据结构与算法笔记(九)—— 希尔排序
- Python笔记-BeautifulSoup通过查找Id获取元素信息
- [Axios] FETCH中的基础语法
- android 手机内存uri_Android消息机制Handler原理解析
- DRmare Audio Converter Mac - DRM音频清除转换工具
- 【考研高数 自用】高数第一章基础阶段思维导图
- 番茄花园xp开机音乐_抱歉,Windows XP的开机音乐骗了你20年
- 在线Js,JavaScript压缩格式化工具
- 关于gis中坐标系:WGS84,EPSG4326,EPSG3857,墨卡托。EPSG:4490
- rancher 启动命令_Rancher 快速上手指南操作(1)
- 西南大学奥鹏教育计算机基础答案,9124《 计算机图像处理基础》20秋西南大学在线作业答案资料...
- ADODB.Recordset 错误 #x27;800a0bb9#x27; 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
- linux pppd源码下载_linux pppd脚本配置(转载)
- c++面试常见题·Part 2 数据结构和STL
- Windows控制台基本操作命令
- 低频(LF)RFID 智能终端
- 键盘的基本使用(包含各种快捷键的使用)
- 一群科学家们坐在一起,认认真真讨论如何治理人工智能了
- 什么是两化融合贯标?对企业有什么好处?