类的继承
我们在前面看到,Person类继承了object类,也就是Person类可以将object类的相关属性和方法作为自己的属性和方法。新的class称为子类(subclass),而被继承的class称为基类(base class)、父类或超类(super class)。下面是继承的基本语法:
在Python中继承有一些特点。
●如果在子类中需要父类的构造方法就需要显式调用父类的构造方法,或者不重写父类的构造方法。
●在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别在于在类中调用普通函数时并不需要带上self参数。
●Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才会到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找。)
如果在继承元组中列了一个以上的类,那么它就被称作“多重继承”。
下面我们先来实现一个例子,再来体会上面的规则。
假定我们在Person的基础上设计一个武将类(Wujiang),它增加了一个经验值exp的属性,一个战斗函数fight()。
如果生成的是派生类对象,则调用自身的fight()函数,运行结果如下:
在这个例子中,Wujiang类继承了Person类,可以把Person当中的参数name和gender继承下来。如果不增加任何新的参数,可以不用写自己的构造函数(初始化函数__init__),但是如果需要给新参数赋值,就需要自己写构造函数,对于继承过来的参数name和gender,可以用两种方式进行赋值,一是直接赋值,二是通过调用父类的构造函数来完成。另外,其他函数也可以继承下来,如果需要修改相应内容,也可以进行重写,如fight()函数在子类中就进行了重写,这样在子类对象调用fight()函数时,优先使用的是自己写的fight()函数。
小P 来总结
我是一个“子类”,可以从父类那里继承很多很多,如单眼皮、大耳朵、爱读书……(继承)
但是我想有自己的特点,如高个子、做机器人……(新增属性和方法)
我在构建自己的时候用了父类的模板,又增加了我自己的特色。(构造函数重写)
即使是爱看书,阅读方向也不同,父类喜欢看文史类的书,我可是对军事很感兴趣呢!(方法的重写)