在前面介绍过面向对象有四大属性,分别是抽象、继承、封装、多态,上一篇文章简单讲了类的用法链接在最下面,今天介绍类的重要属性:继承。
继承是面向对象语言的另一特性。类与类之间可以组成继承层次,一个类的定义(子类)可以定义在另一个已定义类(父类)的基础上。子类可以继承父类属性和方法,也可以覆写。
什么是继承呢?
来看下面的图:
基类(也被称为超类)是指被抽象出来的一类东西,比如说,汽车,汽车就是一个基类,它可以有所有车都有的基本属性,比如四个轮子、车窗等,那下面继承它的子类可以是某一种特定的汽车,比如面包车、越野车、大货车等,它们会继承基类的属性,就是轮子、外形、车窗等,它们也有自己独有的东西,比如货车有车斗、每种车有自己的品牌、每辆车有自己的车牌等。这就是继承。
先看代码:还是用原先的代码:基类如下,基类是一个程序员抽象类,它有每个人的通用属性,姓名、年龄等。(由于我原先写好了继承,我们发现左边会有箭头提示,下面有继承它的类)。
然后是我写的子类:子类是python程序员,它继承了基类中的程序员的通用属性,年龄、姓名、体重,但是他也有自己的特有属性,language,指它掌握的编程语言。
下面是实例化对象进行调用用法:
下面详细介绍类里面一些基础的用法:
调用父类方法:
1、super()
Super允许我们调用父类中的属性,对父类中的属性进行修改(覆写),像我上面的代码,初始化的时候调用父类的初始化函数,必须要用到super。
更加原始的方法:
不过这样体现不出类的继承一般不用。
多继承:同时继承好几个类,不常见,先不讲了。
类通过继承进行定制
在Python中,实例从类中继承,而类继承于超类。以下是属性继承机制的核心观点。
超类列在了类开头的括号中。要继承另一个类的属性,把该类列在class语句开头的括号中就可以了。含有继承的类被称为子类,而子类所继承的类就是其超类。类从其超类中继承属性。就像实例继承其类中所定义的属性名一样,类也会继承其超类中定义的所有属性名称。
实例会继承所有可读取类的属性。每个实例会从创建它的类中获取变量名,此外,还有该类的超类。寻找变量名时,Python会检查实例,然后是它的类,最后是所有超类。
每个object.attribute都会开启新的独立搜索。Python会对每个属性取出表达式进行对类树进行的独立搜索。这包括在class语句外对实例和类的引用(例如,x.attr),以及在类方法函数内对self实例参数属性的引用。方法中的每个self.attr表达式都会开启对self及其上层的类的attr属性的搜索。
逻辑的修改是通过创建子类,而不是修改超类。在树中层次较低的子类中重新定义超类的变量名,子类就可取代并定制所继承的行为。
这种搜索的结果和主要目的就是,类支持了程序的分解和定制,比迄今为止所见到的其他任何语言工具都要好。另外,这样可以把程序的冗余度降到最低(减少维护成本),也就是把操作分解为单一、共享的实现。
本来这篇还想讲python的magic函数(钩子),发现篇幅太长了,就改到下一篇。
上一篇:干货!Python入门基础之面向对象二:类和实例、方法在
码字不易,多多关注,谢谢。
领取专属 10元无门槛券
私享最新 技术干货