课程首页 › 第8章 › 第49课

第49课 继承性

第8章 类与对象的奥秘· 知识点:类与对象 · 原书 8.6.2
插图

程序运行结果如下:

在Employee类中创建了modifySalary()方法对__salary属性进行修改。

在主程序中通过employee.modifySalary(10000)调整了__salary属性的值。

通过printSalary()将保密的薪资打印了出来,工资是保密的,除非他自己说出来,否则其他人不能获取。

类的第二个重要特性是继承性。

在现实生活中,子女会遗传爸妈的一些特征,并且拥有自己的特色。

在Python中,继承的意思也是如此,通过继承我们可以使用原有类的所有功能,并且在原有类的基础上进行拓展。也就是说,每次我们新建一个类的时候,可以通过继承已有的类来获得已有的类的功能。

插图

我们创建一个Person类,继承Animal类。

动物的属性有名字、体重、腿的数量。

人也是动物,也有名字、体重、腿。除此之外,还有智商属性。

动物会跑、会跳,人也会跑、会跳。除此之外,人还会说话。

通过以上分析,我们来创建Person类。

插图

程序运行结果如下:

我是,我在跑。

lily

我是,我会说话。

lily

在程序中,通过class Animal:定义了Animal类,在Animal类中定义了run()方法。

通过class Person(Animal):定义了Person类,Person类继承了Animal类。Python中继承的语法是class Person(Animal):。

通过继承创建的新类被命名为子类或者派生类,那么Person类就称为Animal类的子类或者派生类。

被继承的类被称为父类或者基类,那么Animal类就称为Person类的父类或者基类。是不是很形象?父类和子类与现实社会中人类的遗传很像。

插图

在Person类中,我们定义了一个函数speak()。

在主程序中,通过lily=Person("lily",25,4)创建了Person类的对象lily。很明显,Person类继承了父类Animal类的__init__()方法,因为我们在Person类中并没有定义__init__()方法,但是创建Person类的对象lily使用__init__()方法对name属性、weight属性、legNum属性进行了初始化。

在主程序中通过lily.run()调用了run()方法,使lily跑起来了。可是我们在Person类中并没有定义run()方法,那么肯定是继承Animal类来的。

插图

在主程序中通过lily.speak()调用了speak()方法,使lily会说话了。这个方法就是Person类自己的了。

如果Person类在继承父类的name属性、weight属性、legNum属性的同时,还要增加年龄age属性,要怎么做呢?可以对父类的__init__()方法进行拓展。

插图

程序运行结果如下:

我是,我在跑。

lily

我是,我今年岁,我会说话。

lily 6

在程序中,通过class Animal:创建了Animal类。

在程序中,通过class Person(Animal):创建了Person类,并且继承了Animal类。

Person类的初始化属性需要新增age属性,所以通过以下代码,在Person类中扩展了__init__()方法。

插图

在Person类的__init__()方法中:

①通过Animal.__init__(self,name,weight,legNum)继承了Animal的__init__()方法,对name属性、weight属性、legNum属性进行初始化。

②通过self.age=age新增了age属性的初始化。

在主程序中,通过lily=Person("lily",25,4,6)创建了Person类的对象lily。传了4个属性的初始值,分别是name=lily、weight=25legNum=4、age=6。

通过lily.run()调用了run()方法,让lily拥有了跑的能力;通过lily.speak()调用了speak()方法,让lily拥有了说的能力。

学习了继承并扩展了__init__()初始化函数,我们来试试扩展run()函数让lily跑圈。这样人类的奔跑和普通动物就区分开来了。

插图

程序运行结果如下:

我是,我在跑圈。

lily

在程序中,Person类继承并拓展了Animal类中的run()函数,实现了独特的跑圈。

在主程序中,创建了Person类的对象lily,并且调用了run()方法。因为Person类继承并且扩展了run()方法,所以lily.run()会调用Person类中的run()方法。所以程序运行结果是:我是,我在跑圈。

lily

多级继承

插图

在现实生活中,儿子继承了爸爸的特点,爸爸继承了爷爷的特点。在Python程序中,也有多级继承。

例如:

Dog类继承了Animal类,同时狗狗又有很多品种,泰迪类继承了

Dog类。