# python3小白课:类的继承和多继承 继承也是面向对象的三大特征之一,它是软件实现复用的重要手段,所以一定要学好,在python中,类可以直接继承自其它的0个到多个类。 继承的语法如下: ```python class 子类类名(父类类名1, 父类类名2, ...): # 下面是类定义的部分 ``` 对比类的定义,其实继承很简单,就是在类名后面加上括号,里面写上继承自哪些父类即可。继承后,可以拥有父类的各种方法等,无需再重新定义一次,很方便,这样可以实现复用。 > [!tip] > > 之前的课程中我们学习的类的定义都是没有定义父类的,他们都有一个默认的父类`object`,所以`object`类是所有类的父类。 接下来我们来看一个简单的例子: ```python # coding:utf-8 class Fruit: def info(self): print("我是一个水果,我的颜色是%s" % self.color) class Food: def taste(self): print("我是一种食物,不同的食物味道不同") class Banana(Fruit, Food): pass # 创建Banana香蕉对象并使用 b = Banana() b.color = "yellow" # 调用实例方法 b.info() b.taste() ``` 我们运行后会发现,即使我们对`Banana`这个类里面啥都没有定义,但因为它是继承自水果、食物这俩父类,所以可以赋值里面的实例变量,也可以调用父类里面的方法,这就是类的继承在python中的小例子。 > [!danger] > > 需要注意的是,很多其他编程语言不支持多继承,而python是支持的,在没有必要的情况下,尽量使用单父类继承,这样逻辑比较清晰,也不容易出现莫名其妙的错误。 你还需要想到的一点是,如果进行多继承时,多个父类之中有同名方法怎么办?事实是,排在前面的父类中的方法会屏蔽排在后面的父类中的同名方法。我们来看个小例子: ```python # coding:utf-8 class Fruit: def info(self): print("我是一个水果,我的颜色是%s" % self.color) class Food: def info(self): print("我是一种食物,不同的食物味道不同") class Banana(Fruit, Food): pass # 创建Banana香蕉对象并使用 b = Banana() b.color = "yellow" # 调用实例方法 b.info() ``` 可以看到,虽然我们继承的两个父类都有`info`这个方法但是因为顺序原因,后面的那一个`info`方法并没有被执行。 > [!danger] > > 上述的例子都是最终继承下来的子类是不定义任何方法的,事实上,我们也可以在子类中定义子类特有的方法,比如香蕉相比水果和食物,可能还有自己的特性,比如需要剥皮来吃等,这样可以在子类中定义自己的特有方法,而不影响父类。这一点我们就不展开讲了,你理解成子类可以扩展(extend)父类即可。 ### 单词释义 | 单词 | 释义 | | ------ | ---------- | | object | 对象 | | Fruit | 水果 | | Food | 食物 | | color | 颜色 | | taste | 味道,滋味 | | Banana | 香蕉 | | yellow | 黄色 | | extend | 扩展 |