多态(基础)
多态,指的是:多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print('汪汪汪')
class Cat(Animal):
def speak(self):
print('喵喵喵')
def make_noise(animal:Animal): # 专门定义一个函数用来在传入不同参数时调用相应的对象
animal.speak()
dog = Dog()
cat = Cat()
make_noise(dog)
make_noise(cat)
|
从上面的示例我们可以看出,所谓多态其实就是专门定义一个函数用来在传入不同参数时调用相应的对象,
并且其通常作用在继承关系上,这样可以做到:
- 函数(方法)形参声明接收父类对象(注解用父类是因为父类一般是统称)
- 实际传入父类的子类对象进行工作
- 最终实现同一行为,不同状态
抽象类(接口)
有人可能要问,为什么上面示例代码中父类Animal的speak方法,是空实现pass
这种设计的含义是:
- 父类用来确定有哪些方法 (名称)
- 具体的方法实现 (内容) ,由子类决定
这种写法,就叫做抽象类(也可以称之为接口)
抽象类: 含有抽象方法的类称之为抽象类
抽象方法: 方法体是空实现的pass称之为抽象方法
抽象类就好比定义一个标准,包含了一些抽象的方法,要求子类必须实现,例如:
1
2
3
4
5
6
7
|
class AC: # 空调标准
def coll_wind(self): # 制冷
pass
def hot_wind(self): # 制热
pass
def swing(self): # 摆风
pass
|
接下来不同的厂家用各自的方法去实现这些标准:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 代码续
class Midea_AC(AC):
def coll_wind(self): # 制冷
print('美的制冷方案')
def hot_wind(self): # 制热
print('美的制热方案')
def swing(self): # 摆风
print('美的摆风方案')
class GREE_AC(AC):
def coll_wind(self): # 制冷
print('格力制冷方案')
def hot_wind(self): # 制热
print('格力制热方案')
def swing(self): # 摆风
print('格力摆风方案')
|
接下来结合我们一开始学习的多态:
1
2
3
4
5
6
7
8
|
def make_cool(ac:AC):
ac.coll_wind()
midea_ac = Midea_AC()
gree_ac = GREE_AC()
make_cool(midea_ac)
make_cool(gree_ac)
|