封装、继承、多态

面向对象三大特性,封装、继承和多态,那到底什么是封装,什么是继承,什么是多态呢。这一讲,就来讲这三个特性,第一个叫做封装。

封装

我们仍然是通过案例来讲解,然后我们打开。

Class Person中,定义属性name=“”,age = 0,然后是__weight = 0。注意,前面weight前面加了两个下划线,那就是私有变量。

接下来,定义初始化方法。就是你在实例化这个类的时候呢,一定要进行赋值的数字,分别是n,a,w,然后分别将这些值赋值到成员变量中。然后,定义一个方法,叫做speak。打印谁说今年多少岁,然后是self。

然后,实例化Person,传入“Bela”, 4, 30,意思是Bela已经4岁了,30kg重。最后分别调用speak方法和name属性,以及__weight。结果如下。

如果访问__weight,将报错,没有这个属性,这就是私有成员,通过外部调用是无法访问的。那么,我们注释掉,就能正常运行了。

继承

类是可以继承的,被继承的类称之为父类,或者超类;当前类就称之为子类。那么,Python中,如何继承呢。

我们举一个继承案例。用动物举例,那就来Animal,然后Animal的类里,定义一个方法,run,跑起来。

然后,再定义一个Cat是,也属于动物,继承Animal。如果不定义新方法,输入一个pass,表示默认或者空。同样,再来一个Dog,也用pass空实现。

接下来看实例化, fcat=Cat() fdog=Dog。

然后分别调用run方法。为什么能够调用到run方法呢,这就是Cat和Dog继承了Animal类,相应的方法也一并继承了。调用结果:

这里边还应该注意到,父类的私有变量,在子类里面是没法直接使用的。在Python里面支持多继承,例如,定义SmallCat,是动物,同时也是猫,那么,SmallCat就同时继承Animal和Cat。

多继承中,有一个事项需要大家注意,多个父类中有同样的方法,将从左往右检索类,看是否包含所调用的方法,首先检索到的将被调用。那看如下这个,假如Animal和Cat里面都有同一个方法,那检索的时候是从左往右,先检索到哪个就调用哪个。

结果:

对于run方法,第一个从左到有,先从Cat中寻找,找到了调用:cat is running……!。而call方法,只有父类Cat中有,因此,直接调用父类的方法。

多态

多态是指不同的类,有同样的方法,但是方法的行为不同。其实刚才我们已经有同样的方法,run方法在Dog和Cat中都存在,都继承自父类Animal,但跑起来的表现是不一样的,这就是多态!

多态相当于都是人类,每个人都有不同的形态,黑猫,白毛都能跑,藏獒和泰迪都能跑,但是他跑的形式不一样,这就指的是多态。对多态呢,不给大家再做过多的举例了,后续高级教程中再给大家详细讲解其原理和应用。

IT赶路人

专注IT知识分享