带你自学Python系列(十七):Python中类的用法(三)
↑ 点击上方【计算机视觉联盟】关注我们
今天是小编持续更新关于Python的知识总结以及Python实践项目应用的第17天,带你利用零碎时间自学最受欢迎的编程语言之一Python语言。你和小编一起打卡了吗?
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类(超类),新类称为子类。
1、子类定义和创建
下边结合例子详细叙述类的继承,下边例子是一个简单的ElectricCar类,它具备了Car类的所有功能:
1#!/usr/bin/env python2# -*- coding:utf-8 -*-345# 父类6class Car():7 """一次模拟汽车的简单尝试"""89 def __init__(self, make, model, year):
10 """初始化描述汽车的属性"""
11 self.make = make
12 self.model = model
13 self.year = year
14 self.odometer_reading = 0 # 指定默认值
15
16 def get_descriptive_name(self):
17 """返回整洁的描述性信息"""
18 long_name = str(self.year) + ' ' + self.make + ' ' + self.model
19 return long_name.title()
20
21 def read_odometer(self):
22 """打印一条指出汽车里程的消息"""
23 print("This car has " + str(self.odometer_reading) + " miles on it.")
24
25 def update_odometer(self, mileage):
26 """将历程表读数设置为指定的值"""
27 if mileage >= self.odometer_reading:
28 self.odometer_reading = mileage
29 else:
30 print("You can't roll back an odometer")
31
32 def increment_odometer(self, miles):
33 """将里程表读数增加指定的量"""
34 self.odometer_reading += miles
35
36
37# 子类,括号里必须包含父类名称
38class ElectricCar(Car):
39 """电动汽车的独特之处"""
40
41 # 接受创建Car实例所需的信息
42 def __init__(self, make, model, year):
43 """初始化父类的属性"""
44 # super()特殊的函数,关联父类和子类
45 super().__init__(make, model, year) # 初始化父类的属性
46 self.battery_size = 70 # 初始化电动车特有的属性
47
48 def describe_battery(self):
49 """打印一条描述电瓶容量的信息"""
50 print("This car has a " + str(self.battery_size) + "-kwh battery.")
51
52
53my_tesla = ElectricCar('tesla', 'model S', 2016) # 创建一个my_tesla实例
54print(my_tesla.get_descriptive_name()) # 打印车辆信息
55my_tesla.describe_battery() # 调用电瓶方法
运行结果为:
由上边代码为例子来详细叙述创建子类的方法:
创建子类时,必须包含父类且必须位于子类前面
定义子类时,括号里必须包含父类的名称
在_init_方法内,必须初始化父类所需要的信息,使用super().__init__()方法初始化父类属性
子类特有的属性只包含在子类的实例中,父类的实例并不包含。
2、重写父类的方法
可以对父类中的方法进行重写,方法是在子类中定义与父类同样名字的方法,这样,Python将不会考虑这个父类方法,而只关注子类中定义的相应方法。
假设上述例子中Car类有一个名为fill_gas_tank()的方法,对于电动汽车来说毫无意义,因此可以重写它,代码类似如下:
1class ElectricCar(Car):
2 --snip--
3
4 def fill_gas_tank(self):
5 """电动汽车没有邮箱"""
6 print("This car doesn't need a gas tank!")
3、将实例用作属性
将一个类的实例用作一个类的属性。如还是上述例子,电动汽车有很多关于电瓶的属性和方法,为了使得程序更直观整洁,将关于电瓶的属性和方法放到一个名为Battery的类中,并将一个Battery实例用作ElectricCar类的一个属性,代码类似如下:
1#!/usr/bin/env python2# -*- coding:utf-8 -*-345# 父类6class Car():7 """一次模拟汽车的简单尝试"""89 def __init__(self, make, model, year):
10 """初始化描述汽车的属性"""
11 self.make = make
12 self.model = model
13 self.year = year
14 self.odometer_reading = 0 # 指定默认值
15
16 def get_descriptive_name(self):
17 """返回整洁的描述性信息"""
18 long_name = str(self.year) + ' ' + self.make + ' ' + self.model
19 return long_name.title()
20
21 def read_odometer(self):
22 """打印一条指出汽车里程的消息"""
23 print("This car has " + str(self.odometer_reading) + " miles on it.")
24
25 def update_odometer(self, mileage):
26 """将历程表读数设置为指定的值"""
27 if mileage >= self.odometer_reading:
28 self.odometer_reading = mileage
29 else:
30 print("You can't roll back an odometer")
31
32 def increment_odometer(self, miles):
33 """将里程表读数增加指定的量"""
34 self.odometer_reading += miles
35
36
37class Battery():
38 """一次模拟电动汽车电瓶的简单尝试"""
39
40 def __init__(self, battery_size=70):
41 """初始化电瓶的属性"""
42 self.battery_size = battery_size
43
44 def describe_battery(self):
45 """打印一条描述电瓶容量的信息"""
46 print("This car has a " + str(self.battery_size) + "-kwh battery.")
47
48
49# 子类,括号里必须包含父类名称
50class ElectricCar(Car):
51 """电动汽车的独特之处"""
52
53 # 接受创建Car实例所需的信息
54 def __init__(self, make, model, year):
55 """初始化父类的属性"""
56 # super()特殊的函数,关联父类和子类
57 super().__init__(make, model, year) # 初始化父类的属性
58 # Battery的一个实例作为ElectricCar的一个属性
59 self.battery = Battery(100)
60
61
62my_tesla = ElectricCar('tesla', 'model S', 2016) # 创建一个my_tesla实例
63print(my_tesla.get_descriptive_name()) # 打印车辆信息
64my_tesla.battery.describe_battery() # 调用电瓶方法
运行结果:
往期回顾
● 2018年12月精选文章目录一览
● 亲身经历2019年校招8个大厂心得体会,纯干货分享(大疆、百度...)
● 独家总结 | 一文读懂机器学习的“发展历程” (时间历程,详细又充实!)
● 人工智能相关领域的国际顶尖会议介绍
● 2018年度最强的30个机器学习项目!
带你自学Python系列(十七):Python中类的用法(三)相关推荐
- csdn最新最牛最细python系列【python高阶:自动化相关技能】 python全栈自动化测试系类4-4
目录 [python之smtplib模块发送邮件] 1.tls模式加密 2.ssl加密,默认加密端口是465 MIMEApplication模块添加附件: [python编程之ini文件处理-conf ...
- 青少年python系列 2.Python简介
青少年python系列目录_老程序员115的博客-CSDN博客 青少年python教学视频ppt源码 Python来源 Python的创始人为Guido van Rossum.1989年圣诞节期间, ...
- 青少年python系列 33.python安装非内置模块
青少年python教学视频ppt源码 青少年python系列目录_老程序员115的博客-CSDN博客 简介 python内置模及其内部的功能函数,是无法满足我们编程需求的.这时候如果有能够满足我们需要 ...
- python系列之---python的起源
根据TIOBE发布的2018年5月编程语言排行,可以看到python作为现在十分火热的语言,一直都是保持在前列. 5 月编程语言排行榜 TOP20 榜单: Top 10编程语言TIOBE指数走势(20 ...
- python系列-认识python
1.python是怎么出现的 2.python的发展 3.Python的用途 目前python语言可谓炙手可热,开发,测试.运维还有人工智能.数据分析等板块都是他们的影子. python是什么?pyt ...
- python系列教程-python前世今生以及windows下环境的安装
文章目录 一.python的前世今生 1.1 Python的起源 二.为什么要学习python 2.1.从语言排行榜上看 三.python的安装 3.1 python下载 3.2 自定义安装路径,以及 ...
- [每日一讲] Python系列:Python概述
Python 序章 概述 Python 是弱类型动态解释型的面向对象高级语言,其具备面向对象的三大特点:封装.继承.多态.Python 代码运行时,其有一个编译过程,通过编译器生成 .pyc 字节码 ...
- python文件之间的相互调用_「Python 系列」 Python 生成器函数详解
Python的生成器函数提供了一种强大的机制来管理数据和计算资源,但是对于Python的新手来说,它们不一定直观.在本文中,我将分解生成器的机制,同时还介绍我希望是一个有启发性的示例:用于管理和流传输 ...
- 【Python系列】Python写csv文件长数字变成科学记数法的解决方案
DATE: 2022.5.7 文章目录 前言 1.参考 2.问题再现 3.问题原因和分析 4.解决方案 前言 在采用Python处理csv文件时,将长数字的字符串写入csv文件中时,csv表格中的长数 ...
- 【Python系列】python GUI界面
1.环境准备 1.自己安装好python2.7 和 pyCharm 2.安装pyQt4 (1)下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/ (2)p ...
最新文章
- python类方法可以访问类变量_python类变量可以从类方法访问? - python
- Spring2.5+MINA2搭建Socket Server
- 连续特征离散化方法介绍
- 《誓鸟》是什么小说?
- pcb板子制作各层的解释和用法
- spring cloud构建互联网分布式微服务云平台-Spring Cloud Commons 普通抽象
- HDU3501——欧拉函数裸题
- AppDynamic自定义统计异常reportError,实时显示结果
- SecureCRT下载和破解
- R语言(一):Mac系统M1芯片下安装R语言和RStudio教程,R语言入门
- js模板引擎渐进--each/for(5)
- AD元器件英中名称对照【Ctrl + F 快速查找元器件英文名称】
- 程序员到底要不要读研,过来人给你几点建议!
- Java培训哪个机构比较好?怎么选?
- Vue3中数据更新函数effect的实现
- Chrome无法安装axure插件
- windows电脑安装python教程
- 大数据精准营销应用(三)
- 专业应用软件随身带,一招助您轻松搞定客户
- oracle 12c recover table恢复单表
热门文章
- php 中的作用是什么,php中static关键字的作用是什么
- 遍历数组长度_Java基础之数组
- android 长按 秒事件_原来手机长按2秒,能开启5个实用功能,一键提取图片上的文字...
- 不同级别成员对应三种继承的结果:
- 编程范式 —— 函数式编程入门
- u3d中刚体与碰撞体的理解以及is Trigger属性的意义
- CentOS 恢复 rm -rf * 误删数据(转)
- url 解析一个url里面的参数,获取地址栏参数信息
- UI: 自定义 UISegmentedControl
- oracle服务开机自启动