python3xiaobaike_2020/chapter7/7-6 python3小白课:类的继承和多继承.md
2025-04-20 23:22:14 +08:00

84 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | 扩展 |