大家好,今天我们一起聊聊Python“类”之继承,说到这个题目,其实我不是特别喜欢,也纠结了几个小时,“所有官方的教程里面都是继承,可我认为在某些程度上遗传更贴切”,文章的封面也选了好久,最终决定了这张亲子图。正式讲之前,和大家聊聊这些,我想对于内容的理解应该会有所帮助。
首先,我们定义一个animal动物的类(就把自己当Python界的造物主吧,现在你正在创建animal):
接下来想创造dog,dog也会eat和sleep,于是身为造物主的我们偷懒了,“eat和sleep,animal就有,能不能从它那儿继承过来”,当然可以啊,大家请看:
我们猜猜看,会输出什么结果,为什么dog类连初始化函数也没有,这样子可以吗?大家先看运行结果
dog继承了animal遗传给它的eat和sleep方法,并调用了animal的初始化方法,好吧,这么大的恩情,所以理所应当的,dog就是儿子,即子类,animal就是爹,即父类。
创造完dog,于是造物主的我们手又痒痒了,现在着手创建cat吧:
这回,又会有什么输出结果呢?
发现什么没,cat调用的是自己的初始化方法和eat方法,这就像拒绝继承皇位的王子,想靠自己的意志活出不一样的人生。这在Python里,叫做方法重载,也就是子类根据自己的需要,重写父类中的方法。
然后呢,再创造一个会飞的哺乳动物,蝙蝠bat:
bat类继承自animal类和bird类,在Python里,这叫做多重继承,就像小孩继承了父母双方的基因,既聪明又漂亮;bat类还生成自己独特的方法focus,下面我们一起看一下运行结果。
1、继承语法 class 子类名(父类名1,父类名2,...):
2、子类可以创建自己独有的方法
3、方法调用时,子类先在本类中查找调用的方法,找不到才去父类中按次序找,即在父类1中找到了就不去父类2中找了,这一点可以从bat类的初始化方法中看出。
4、子类可以重写继承自父类中的方法,即方法重载,方法调用时,优先调用子类中重载过的方法,比如上述代码中的eat方法。
今天的Python大餐就先到这儿,大家回去好好消化,等着你的会是更美味可口,敬请享用。