更多教程请私信~
来源:思路实验室
作者:室长
大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。
我们在上一期讲了如何去自己写一个类,也生成了不同的类实例,但有些目标还没有达成。
比如“把大象装冰箱”的小品后边跟了一个问题:动物园举办联欢大会哪个动物没有来?
或者就像之前动物园的奇葩要求一样,把动物按照不同的规则装到不同的容器里,容器还是数量有限的。
这些问题都涉及到一个动物园的整体情况,而我们目前写的实例的属性,每个实例都是独一份的。我们需要把实例之间的壁垒打通,让它们可以共享一些信息,这时候我们就需要类变量了。
拿刚才第一个问题举例子,动物园举办联欢大会哪个动物没有来?想知道这个答案,我们首先需要一个动物园里动物的名单,以及他们有没有被关起来,这个信息对于动物园里的动物来说应该是共享的,我们就可以把动物名和有没有被关起来的对应关系作为一个字典,存入类变量。
那么在初始化一个动物实例的时候,我们就要向字典中写入键名为“动物名”,值为“没有被关起来”的项。而在给动物执行关起来的操作后,要把相应键的值改为“被关起来了”:
我们稍微改动一下之前的代码,在哺乳动物类下边声明一个空字典变量,这个就是类变量,它的前边不需要加self.
但是我们看__init__函数,我们发现我们调用类变量的时候还是需要在类变量前加上类名的。
我们生成几个动物实例来看一下:
关于最后一句keys函数请参考这里。
没什么问题,三只动物都已经登记在册了,那我们来关一只看看:
谁被关了谁没被关,一目了然。这下很容易得出动物园开联欢大会有谁没有来的答案了吧!
那我们在看第二个问题,现在大家应该有思路了吧!
我们可以把冰柜数也作为类变量,每有一个动物被装进冰柜,就把冰柜数减1,减到0以后,原本该装冰柜的都改装对开门冰箱:
可以看到,作为公大象的刘老八,因为动物园冰柜不够而被屈辱地关进了对开门冰箱里……
如果动物园通知,统计每种容器里放了多少动物,这个问题就留给大家自己去联系吧!
经过我们充分地运用了类的功能,我们仅仅使用了50行代码就实现了如此复杂的功能,不得不说,懒人有懒福啊!
室长在开始学习python后有很长一段时间都没有使用过对象,因为觉得常规的变量和函数已经够用了,但当遇到这种复杂的需求时终于体会到了对象的好用之处。不过使用对象对抽象的能力要求会比较高。其实适合自己的才是最好的,有的人觉得不用对象好,当然也可以不用。
介绍过了类变量,我们对对象的初步了解可以告一段落了。这时候我们要回过头来看一看我们学到的概念有没有什么问题。请关注下期:变量真的是变量名+变量值吗?变量的本质