【Python教程】十三、我连对象都找不到还让我用对象?类与对象(一)
更多教程请私信~
来源:思路实验室
作者:室长
大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。
上一期我们凭借前边这些浅显的知识就写出了一个很有用的小程序,大家是不是一下子就获得信心了?
没错,其实Python就是这么简单。
但你以为这就是全部了?那你就大错特错了!(虽然室长以前就只靠着这点水平写了很多程序……)
我们只是介绍了Python的冰山一角。
回想一下我们学习编程的初衷,那就是懒,但是懒无止境,没有最懒,只有更懒。而我们现在所学到的东西不支持我们做到更懒的地步。
基于我们之前的“把大象装冰箱”举个例子:
动物园颁布了新的管理条例:15岁以上的象算成熟大象,公大象要装到冰柜里,母大象要装到对开门冰箱里,小象要装到微波炉里。每个装象的容器外边都要贴上大象的名牌。装象期间给公象一个苹果,给母象一个橘子。请将动物园10只大象按照规则关好。
那我们这个程序要怎么写?
首先可知,这回的大象不再是我们之前所说的'大象'了,它从一个字符串变成了一个更加具体的东西,每只大象都有它的名字、性别和年龄。那么我们应该怎么定义每个大象呢?可以这样吗:
A大象的名字 = '刘老六'A大象的性别 = '男'A大象的年龄 = 53B大象的名字 = ……
可以是可以,但是这样定义10个大象光代码就得30行,累不累啊?而且变量之间都是相互独立的,相互之间没有关联,搞得跟个散装大象一样。
有的同学就说了:这种情况是不是可以用字典?
这些同学很聪明,用字典当然可以,比刚才那种情况好多了:
A大象 = {'姓名':'刘老六','性别':'公','年龄':53}B大象 = ……
一下子变得简洁了,而且不同属性之间有了相关性(所有属性都关联到同一只象),那我们继续。我们把规则拆分成三个部分:装大象,贴名牌,放水果。
对于大象该装到那里我们先要判断它的年龄是不是大于等于15岁,然后判断它是公是母,用if语句的话就需要嵌套或者“与”运算:
if 大象['年龄'] >= 15 and 大象['性别'] == '公':把大象装到冰柜里
elif 大象['年龄'] >= 15 and 大象['性别'] == '母':把大象装到对开门冰箱里
else:把大象装到微波炉里
再贴名牌:
if 大象['年龄'] >= 15 and 大象['性别'] == '公':把大象装到冰柜里把大象['姓名']贴到冰柜上
elif 大象['年龄'] >= 15 and 大象['性别'] == '母':把大象装到对开门冰箱里把大象['姓名']贴到对开门冰箱上
else:把大象装到微波炉里把大象['姓名']贴到微波炉上
麻不麻烦?太麻烦了这个。有懒的同学已经想出办法了,把装大象的容器也作为一个键值对写进字典行不行?当然行!
if 大象['年龄'] >= 15 and 大象['性别'] == '公':大象['容器'] = 冰柜
elif 大象['年龄'] >= 15 and 大象['性别'] == '母':大象['容器'] = 对开门冰箱
else:大象['容器'] = 微波炉
把大象装到大象['容器']里
把大象['姓名']贴到大象['容器']上
最后放水果,这回又得再判断一遍大象的公母,因为之前我们没对小象做判断:
if 大象['年龄'] >= 15 and 大象['性别'] == '公':大象['容器'] = 冰柜
elif 大象['年龄'] >= 15 and 大象['性别'] == '母':大象['容器'] = 对开门冰箱
else:大象['容器'] = 微波炉
if 大象['性别'] == '公': 大象['水果'] = 苹果
else: 大象['水果'] = 橘子
把大象装到大象['容器']里
把大象['姓名']贴到大象['容器']上
给大象一个大象['水果']
这下差不多了吧!确实,这些已经足够我们执行这个规则了,虽然看起来有点凌乱。只要我们将初始数据定义好,然后进行for循环就可以了。
但是动物园突然通知,要给骆驼也来一套类似的规则,但给水果只给仙人掌……
但是动物园突然通知,冰柜不够用了,装不完的也装对开门冰箱里……
但是动物园突然通知,要统计每种容器里放了多少动物……
但是动物园突然通知……
这时候你如果想改代码,可就不是一行两行的事了,可能又要加班加点熬夜了,头发又哗哗地掉了好几根。
所以我们需要一种灵活的表达方式,来对大象的一系列特征进行操作。而用我们之前学到的数据类型已经不能满足我们了。而Python的类与对象,很好地解决了这个问题。
什么是类?其实Python中的类和我们生活中认知的类是很相似的。比如说象,一般情况下大象都会有长鼻子大耳朵大粗腿,当然也有我们刚才说的年龄性别,这就可以是一个类,它不具体指哪只大象,而是一个宽泛的概念。
如果我们把这个范围缩小一些,从生物学的角度讲大象的种类分亚洲象和非洲象,亚洲象是不是一个类呢?当然,同理非洲象也一样。
相反,如果我们把这个范围扩大一些,大象属于哺乳动物,那哺乳动物是不是一个类呢?更是了。
可以看到,刚才举的例子中,几个类是有包含关系的:
因此,大的,包含别的类的被称为父类,而小的,被别的类包含的被称为子类。
在这里:
哺乳动物是大象的父类,大象是哺乳动物的子类;
大象是亚洲象的父类,亚洲象是大象的子类。
但是:
哺乳动物是亚洲象的父类的父类,而不是亚洲象的爷类(没有这种说法)!
而这种父类子类关系意味着什么呢?哺乳动物都有性别年龄,那大象有没有性别年龄?当然有,这都不用问。同样,大象都有长鼻子大耳朵,亚洲象也一样。所以抽象来看,父类的特征被子类继承了,而子类相当于在父类的基础之上又添加或修改了一些特征。这和Python中的类是一样的。
但不管是哺乳动物还是大象还是非洲象,父类还是子类,我们指的都是一个宽泛的范围,不是具体指的哪一只。而在实际操作中,我们需要针对具体某一只的情况去对它进行相应的处理。那这时候我们就不再是凭空去创造一只大象了,而是可以根据大象这个类所拥有的特征去创造一只大象,而创造的过程被称为实例化,实例化的大象(可能名叫刘老六)被称为对象。
有了这些知识,我们就有思路挑战动物园的BT任务了:
但这期篇幅太长内容太多压缩不完随便开一个头又一两千字出去了所以这期就到这里请关注下期:找不到对象?用Python自己写一个|类与对象(二)
【Python教程】十三、我连对象都找不到还让我用对象?类与对象(一)相关推荐
- python类和对象介绍_Python开发基础-Day17面向对象编程介绍、类和对象
面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...
- 【java笔记】类与对象(定义,创建,使用,标准的类,对象数组)
面向对象的特征: 封装,继承,多态 类:一组相关属性(数据成员)和行为(成员方法)的集合.抽象出事物的属性和行为来描述事物. 对象:一类事物的具体体现. 类和对象的关系: 类的定义: 例:定义一个学生 ...
- python教程视频-有没有适合零基础小白学的python教程,视频或者书籍都可以?
当你想要自学 python3 编程时,面临的第一个问题是:"我应该看哪些书/教程/视频?"我有一份亲自验证过的极简答案.我刚经过 python3 入门并已开始实战数据分析与爬虫,这 ...
- 只会温水煮青蛙,工作都找不到还不好好学这份16W字Java面试合集
蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力.培训.出国.大公司的经历,还有很多很好的朋友.但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可惜 ...
- ##连大学定位都找不准,还想虐面试官?(AKD)
出道即是巅峰,天赋大于努力,成功是不可复制的.当你在为你考上不好的学校,觉得平台低的时候,不要不屑.不要言论.不然会后悔当初自己的行为举止.作为一个乐于助人的AKD,我会将大学四年的感悟告诉大家.为此 ...
- python 练习 : 帮我把硬盘里的图片都找出来
要点:使用系统模块,遍历磁盘,遍历文件,找到符合条件的文件记录下来到一个Log文件中(XML格式). python 代码 import win32api import os #constants an ...
- 简明python教程在线-简明python教程
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. usrbinpython#hello_world.pyprinthell ...
- 简明python教程在线-Python简明教程
Python简明教程在线阅读地址: https://bop.molun.net/ DocStrings 该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束.第二行为空行,后 ...
- 简明Python教程学习笔记_8_异常
菜鸟教程 之 Python 异常处理:http://www.runoob.com/python/python-exceptions.html Python 一篇搞定所有的异常处理:https://ww ...
最新文章
- 使用多个JFrame:好的还是不好的做法? [关闭]
- android 简易定时器
- 在window 2008 server r2 64位 IIS上配置 apache tomcat 8.0
- 合作模式歌利亚机器人_智能时代挑战下的机器人教育新方向!
- lintcode: 把排序数组转换为高度最小的二叉搜索树
- fopen,fopen_s,fclose, _fcloseall函数用法
- Java Enterprise软件与应有的内容
- unbuntu cmake安装mysql_ubuntu下编译安装mysql5.5
- go java gc_图解Golang的GC垃圾回收算法
- [整理]国际学术会议
- 虚拟机ping不通宿主机,宿主机能ping通虚拟机
- python爆破脚本_snmp爆破(python脚本)
- BackgroundWorker的参数传递
- 台架控制器-AVL_ISAC学习
- Excel技巧:删除换行符、文本前空格、文本中间空格
- 数据分析常见SQL面试笔试题
- 网络安全攻防之IPC$攻击
- linux虚拟机 Ubuntu 安装方法
- java dataframe agg_Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
- IBM数据保护和存储管理
热门文章
- 大学生体测技巧 动态拉伸,立定跳远,肺活量,仰卧起坐,坐位体前屈
- Unity任意方向拉伸物体
- SDHC 存储卡会导致刷机模式不被识别
- 天龙八部科举答题问题和答案(全6/8)
- 关于微命令,微指令,微程序,机器周期,机器指令的关系图解(超详细)
- 运用frame、frameset框架不显示问题
- 浅浅分析滤波器截止频率
- Downloaded file failed signature verification and may have been tampered with....
- CNN神经网络猫狗分类经典案例
- XtraReport中改变文字方向