1. 多态
1.1 定义
多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)
1.2 示例
多态:同一种事物的多种形态,比如,动物分为 人、狗、猪类
class Animal:
def run(self):
raise AttributeError('子类必须实现这个方法')
class Person(Animal):
def run(self):
print('person is running')
class Dog(Animal):
def run(self):
print('dog is running')
class Pig(Animal):
def run(self):
print('pig is running')
tom = Person()
jack = Dog()
peiqi = Pig()
tom.run() # person is running
jack.run() # dog is running
peiqi.run() # pig is running
2. 多态性
多态和多态性是两种概念
2.1 定义
多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。
在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数
2.2 示例
多态性:一种调用方式,不同的执行结果
class Animal:
def run(self):
raise AttributeError('子类必须实现这个方法')
class Person(Animal):
def run(self):
print('person is running')
class Dog(Animal):
def run(self):
print('dog is running')
class Pig(Animal):
def run(self):
print('pig is running')
tom = Person()
jack = Dog()
peiqi = Pig()
# 多态性依赖于:继承
# 多态性:定义统一的接口
def func(obj): # obj这个参数没有类型限制,可以传入不同类型的值;参数obj就是“多态性”的具体表现形式
obj.run() # 调用的逻辑都一样,执行的结果却不同
func(tom) # person is running
func(jack) # dog is running
func(peiqi) # pig is running
综上,多态性就是一个接口(函数),多种实现
2.3 为什么要用多态性(多态性的好处)
从上面多态性的例子可以看出,我们并没有增加上面新的只是,也就是python本身就是支持多态性的,这样做有何好处?
- 增加了程序的灵活性
以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(obj) - 增加了程序的可扩展性
通过继承animal类创建一个新的类,使用者无需更改自己的代码,还是使用func(obj)去调用
注:
多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度) 多态性:一种调用方式,不同的执行效果(多态性)