3.3 KiB
3.3 KiB
python3小白课:重写父类方法和使用super函数
重写父类方法
子类可以继承父类的方法,但有的时候,子类可能在某些行为上有自己的表现形式,这时候就要重写父类的方法。
咱举个简单的例子,我们知道鸟类有飞翔的技能, 鸡也是一种鸟类,那么鸡理论上也继承了飞翔的技能。但实际表现呢?鸡只能扑棱扑棱翅膀,是不能像其他鸟内一样飞的很高的,所以这时候就要重写鸡的飞翔的方法。
Tip
鸡属于鸟类。
解析:鸟类在动物分类上属于一个“纲”——“鸟纲”。鸟纲动物就是我们俗称的鸟类。 鸡属于鸟纲,雉科家禽,据研究,鸡的听觉器官(内耳、外耳)对可听声有很好的敏感性。鸡栖息地面,除耳朵外,它的腿部还具有灵敏的振动感受器,震前可能感受到地声,出现行为异常。 所以鸡是鸟类。
因此我们可以看一下如下示例代码:
# coding:utf-8
class Bird:
def fly(self):
print("我在天空,自由飞翔")
class Chicken(Bird):
def fly(self):
print("我在地面,扑棱扑棱翅膀")
a = Chicken()
a.fly()
重写父类方法会覆盖掉父类原来的代码,就像示例写的那样。
使用super函数调用父类的构造方法
python规定:如果子类重写了父类的构造方法,那么子类的构造方法必须调用父类的构造方法。我们可以采用super()函数来调用父类的构造方法。
比如我们看这样一个例子:
# 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__这个构造方法,但里面什么内容也没写,这样一运行,会报错,实际没有继承和运行父类的构造方法。
但如果我们把代码改成这样:
# 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 | 超级 |
