93 lines
3.3 KiB
Markdown
93 lines
3.3 KiB
Markdown
# python3小白课:重写父类方法和使用super函数
|
||
|
||
### 重写父类方法
|
||
|
||
子类可以继承父类的方法,但有的时候,子类可能在某些行为上有自己的表现形式,这时候就要重写父类的方法。
|
||
|
||
咱举个简单的例子,我们知道鸟类有飞翔的技能, 鸡也是一种鸟类,那么鸡理论上也继承了飞翔的技能。但实际表现呢?鸡只能扑棱扑棱翅膀,是不能像其他鸟内一样飞的很高的,所以这时候就要重写鸡的飞翔的方法。
|
||
|
||
> [!tip]
|
||
>
|
||
> 鸡属于鸟类。
|
||
>
|
||
> 解析:鸟类在动物分类上属于一个“纲”——“鸟纲”。鸟纲动物就是我们俗称的鸟类。 鸡属于鸟纲,雉科家禽,据研究,鸡的听觉器官(内耳、外耳)对可听声有很好的敏感性。鸡栖息地面,除耳朵外,它的腿部还具有灵敏的振动感受器,震前可能感受到地声,出现行为异常。 所以鸡是鸟类。
|
||
|
||

|
||
|
||
因此我们可以看一下如下示例代码:
|
||
|
||
```python
|
||
# coding:utf-8
|
||
class Bird:
|
||
def fly(self):
|
||
print("我在天空,自由飞翔")
|
||
class Chicken(Bird):
|
||
def fly(self):
|
||
print("我在地面,扑棱扑棱翅膀")
|
||
|
||
a = Chicken()
|
||
a.fly()
|
||
```
|
||
|
||
重写父类方法会覆盖掉父类原来的代码,就像示例写的那样。
|
||
|
||
---
|
||
|
||
### 使用super函数调用父类的构造方法
|
||
|
||
python规定:如果子类重写了父类的构造方法,那么子类的构造方法必须调用父类的构造方法。我们可以采用`super()`函数来调用父类的构造方法。
|
||
|
||
比如我们看这样一个例子:
|
||
|
||
```python
|
||
# coding:utf-8
|
||
class Bird:
|
||
def __init__(self):
|
||
self.name = "鸟类"
|
||
def fly(self):
|
||
print("我在天空,自由飞翔")
|
||
class Chicken(Bird):
|
||
def __init__(self):
|
||
pass
|
||
def fly(self):
|
||
print("我在地面,扑棱扑棱翅膀")
|
||
|
||
a = Chicken()
|
||
print(a.name)
|
||
```
|
||
|
||
我们可以看到在这个简单的例子中,子类重写了父类的`__init__`这个构造方法,但里面什么内容也没写,这样一运行,会报错,实际没有继承和运行父类的构造方法。
|
||
|
||
但如果我们把代码改成这样:
|
||
|
||
```python
|
||
# coding:utf-8
|
||
class Bird:
|
||
def __init__(self):
|
||
self.name = "鸟类"
|
||
def fly(self):
|
||
print("我在天空,自由飞翔")
|
||
class Chicken(Bird):
|
||
def __init__(self):
|
||
super().__init__()
|
||
def fly(self):
|
||
print("我在地面,扑棱扑棱翅膀")
|
||
|
||
a = Chicken()
|
||
print(a.name)
|
||
```
|
||
|
||
添加了这一句:`super().__init__()`。这样用`super()`函数指代父类来调用父类的构造方法,这样再执行就可以获取到父类初始化好的`name`信息了。
|
||
|
||
这样的应用还可以应用在从多个父类继承的情况下,如果多个父类都写了自己的构造方法,那么默认情况下子类只会调用第一个父类的构造方法并初始化(因为排在前面),这时候就可以写一个子类的构造方法,来分别调用父类的构造方法了,这样多个父类继承也都能初始化到了。大家感兴趣可以自己深入再研究一下。初学阶段掌握到这里就ok了。
|
||
|
||
|
||
|
||
### 单词释义
|
||
|
||
| 单词 | 释义 |
|
||
| ------- | -------- |
|
||
| Bird | 鸟,鸟类 |
|
||
| fly | 飞,飞翔 |
|
||
| Chicken | 鸡 |
|
||
| super | 超级 | |