python中的多态

当子类和父类都存在相同的 game()方法时,子类的 game() 覆盖了父类的 game(),在代码运行时,会调用子类的 game()。

这样,我们就获得了继承的另一个好处:多态

    多态的好处就是,当我们需要传入更多的子类,例如新增 XX Dog、YY Dog 等时,我们只需要继承 Dog 类型就可以了,而game()方法既可以直不重写(即使用Dog的),也可以重写一个特有的。这就是多态的意思。调用方只管调用,不管细节,而当我们新增一种Dog的子类时,只要确保新方法编写正确,而不用管原来的代码。这就是著名的“开闭”原则:

  • 对扩展开放(Open for extension):允许子类重写方法函数
  • 对修改封闭(Closed for modification):不重写,直接继承父类方法函数

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Dog(object):

def __init__(self, name):
self.name = name

def game(self):
print("{}跳".format(self.name))


class XiaoTianDog(Dog):

# 方法重写
def game(self):
print("{}飞".format(self.name))


class Person(object):

def __init__(self, name):
self.name = name

def game_with_dog(self, dog):
print("{}和{}玩耍".format(self.name, dog.name))


# 创建Dog对象
Peter = Dog("皮特")
# 创建XiaoTianDog对象
wangcai = XiaoTianDog("旺财")
# 调用Dog里面的game方法
Peter.game()
# 调用XiaoTianDog里面的game方法
wangcai.game()
xiaoming = Person("小明")
xiaoming.game_with_dog(wangcai)

运行结果

1
2
3
皮特跳
旺财飞
小明和旺财玩耍
打赏了解一下?
0%