【Python教程】十四、找不到对象?用Python自己写一个|类与对象(二)

news/2024/11/28 0:02:01/

更多教程请私信~

来源:思路实验室 

作者:室长

大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。

书接上文,我们面对动物园甲方爸爸的要求有了一定的思路,它可以是这样的:

动物园所有的哺乳动物都有姓名、性别、年龄,那么我们就可以定义一个哺乳动物类,语句是这样写的:

我们看第一行,class 哺乳动物() :这句定义了一个叫哺乳动物的类。这个结构很像我们之前定义函数的def语句,不同的是定义类使用的关键字是class。而在这个括号里填的可不是参数,填什么我们后边再说。

再看第二行,似乎我们在定义一个函数。在类里也可以定义函数吗?当然!而且在类里定义的函数还有个更好理解的名字,叫方法。所以我们现在是在定义一个方法。

那def后跟的__init__是什么意思呢?使我们自己起的炫酷的方法名吗?不是的,可以看到语法高亮小秘书已经给它涂上了彰显尊贵的亮紫色,表明了它不平凡的血统。

没错,__init__是一个内建函数,是initialize的缩写,意思是初始化。根据一个抽象的概念上的类创建一个具体的实在的对象,这个过程叫实例化,而在实例化的过程中,就会调用__init__函数。

看一下__init__后边的参数坑位,姓名、性别、年龄都是我们要定义的,没什么好说的。但这self是怎么回事?还被涂上了暗紫色?

还接着我们上一期的例子来看。我们要对大象分情况来管理,有一头大象叫刘老六,我们希望就这只具体的、特定的大象叫刘老六,性别公,年龄53,而不是所有的大象呼啦一下子都变成刘老六了。所以在实例化刘老六的时候,我们希望__init__函数作用到对象本身,所以在参数坑位首位的是代表实例本身的self。

那我们来看第三行及后边的代码:self.姓名 = 姓名,看到一个等号想到什么?赋值!而self.姓名,看到点,回想我们之前在第十期讲的,可以把点理解为什么?的!也就是说self.姓名相当于实例自己的姓名。

后边几行都一样,而自己的姓名、性别、年龄都被称为自己的属性,即对象属性。而在最后一行,我们调用一下自己的姓名属性来打印一行字。

但这还不算完,我们目前只定义了一个类,还没有用这个类去实例化一个对象:

有同学提醒了:哎室长,self那个坑位没填!

这说明这位同学很仔细地学习了函数,但在这里self默认是对象自己,所以不需要填写self坑位。

我们来运行一下:

可以看到,在我们实例化对象时,__init__函数就被执行了,除了在给刘老六的属性赋值,还打印出了一句话。

那我们如何知道刘老六的年龄呢?既然self.年龄是自己的年龄,那刘老六的年龄就是刘老六.年龄:

是不是非常清晰明了?

在哺乳动物之下,我们还要定义一个大象的子类,而定义的属性是哺乳动物不一定确定的(比如成年的年龄、要给它送的水果等),我们可以这样写:

这里第一行 class 大象后边的括号我们填写了刚才定义的哺乳动物类。所以这个括号里应该填写的是这个类要继承的类(即父类)。

第二行没的说了,跟刚才一样。

第三行就比较有意思了,在大象这个类实例化时,先要调用父类哺乳动物的__init__函数。刘老六它首先是个哺乳动物,其次才是大象。如果我们要再写一个骆驼的类,同样也可以调用哺乳动物的__init__函数。有了这种继承方法,我们就不用一遍一遍地重复写了。

第四行定义一个成年年龄的属性,方便我们后边判断动物是否成年。

后边的就没有什么问题了,如果看不懂可以重新看一看第七期关于if语句的介绍。

我们来运行一下:

没有问题,是我们想要的结果。

那我们继续,这下我们可以走完装大象的过程了。

因为对于动物园来说,我们不管是装大象还是装骆驼还是以后装个老虎狮子,流程都是一样的,只不过一些判据、给的东西不一样,所以我们可以把装动物的方法写到哺乳动物类里:

我们先写了一个确定容器的函数,函数的参数坑位只有一个self,因为这个函数里所有需要用到的属性都是对象自身的属性,所以只写一个self就够用了。

另外很多属性明明是我们在大象这个子类里定义的,在哺乳动物这个父类里也能调用吗?答案是可以的,因为在调用这个函数之前我们已经对大象的对象进行了初始化,它所调用的属性就有了值。

函数的内容其实和我们上一期写的伪代码差不多,这里就不再展开了。我们调用一下刘老六的全流程方法:

我们在第十二期的末尾遇到了这种用法(file.split()),当时的file是文件名的字符串。想到什么了吗?

字符串也是对象!我们从一开始就在使用对象了!而且不光是字符串,在Python里,万物皆是对象,格局一下子就大了有木有!

但我们今天不做进一步的阐释了,只要知道在第十二期我们是在使用字符串的方法就可以了。

回来继续运行程序:

完美!

我们再搞一只大象:

判断得非常准确!

那我们再去搞骆驼,一下子就变得简单了,只要写一个骆驼的类就可以:

是不是非常简单省事!

可以想见,用不了多少代码,我们就可以把整个动物园的动物都安排上。

这一期我们了解了如何动手去写一个类,如何从类去实例化一个对象,如何调用对象的属性和方法,如何实现类的继承。这些内容可以让我们的代码变得更加简洁,让我们能够以更懒的方式去完成任务。

但我们还是有一些任务目标没有达到,比如动物园的冰柜不够用的这种情况。不管是冰柜还是冰箱微波炉,都应属于整个动物园共用的设备。那么对于类来说,有没有这样一个共用的量呢?请关注下期:动物园举办联欢大会哪个动物没有来?类变量。


http://www.ppmy.cn/news/583684.html

相关文章

CSS - 响应式布局(一)媒体查询

目录 响应式布局 引子 理解响应式网页和响应式布局原理 媒体查询 什么是媒体查询? 什么是媒体类型? 什么是媒体特性? 媒体查询语法 仿三星官网首页 响应式布局 引子 通过前面两节的学习 CSS - 移动端布局(一&#xff…

别克GL8,这样的改装太令人兴奋了

别克GL8一直深受广大爱车人士的喜爱,别克GL8的改装也是层出不穷,下面我们一起来看看这款的改装吧! 前脸换上了“雅典娜”的前脸,视觉效果非常棒,不仅在格栅的设计上极其夸张,它的内饰更是可完全比肩商务舱&…

Python学习笔记:第四站 往哪走

Python学习笔记 文章目录 Python学习笔记第四站 往哪走1. 程序的组织结构2. 顺序结构3. 对象的布尔值4. 分支结构5. pass空语句6. 本章作业 课程笔记参考B站视频: Python全栈开发教程。 第四站 往哪走 1. 程序的组织结构 1996年,计算机科学家证明了这…

当我们老了,又会怎样

最近在看《我们仨》,一本杨绛先生的散文集。 这本书分为了三部分。第一部分算是个引子,就杨绛先生晚年的一个梦开始,以梦中“钟书大概是记着‘我’的埋怨,叫‘我’做了一个长达万里的梦”拉开全文序幕;第二部分则是描…

第 350 场周赛

A 总行驶距离 纯模拟 class Solution { public:int distanceTraveled(int mainTank, int additionalTank) {int res 0;while (1) {if (mainTank > 5) {res 50;mainTank - 5;if (additionalTank) {additionalTank--;mainTank;}} else {res mainTank * 10;break;}}return …

史上最极品美女乞丐,难道是犀利姐来了?(有图有真相)

昨天在街上闲逛,突然发现路边有个乞丐,跟犀利哥的造型一模一样!我K,这年头连乞丐都会追星了!仔细一看,丫还是个女的,还挺面熟的。再仔细的看了一眼,晴天霹雳!居然是那个讲…

美女搭讪

星期天电磁炉坏了,中午去快餐店吃饭,一个人啊,无奈。 吃着吃着,突然有个美女过来。 她跟我说:一个人么?我脱口而出:对啊 我当时老开心了,居然有美女来搭讪。 结果,结果。。。。 …

经典SQL语句大全二:提升

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1<>1(仅用于SQlServer)法二:select top 0 * into b from a2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用) insert into b(a, b, c) select d,e,f …