最近学到了Python的面向对象部分,见到了一个新词——多态性,翻了一下以前自己记的东西才发现这不是Python独有的,以前学的还真是有不少遗漏啊…
##多态
- 多态多态指的是一类事物有多种形态,(多态的概念是依赖于继承的)
简单的多态实例——动物的多态
class Animal:
def run(self):
raise AttributeError('子类必须实现这个方法')
class People(Animal):
def run(self):
print('人正在跑')
class Pig(Animal):
def run(self):
print('pig is running')
class Dog(Animal):
def run(self):
print('dog is running')
peo1=People()
pig1=Pig()
d1=Dog()
peo1.run()
pig1.run()
d1.run()
运行结果:
人正在跑
pig is running
dog is running
得到预想中的结果,了在动物的class中定义了run的抽象方法,由People、Pig和Dog三个类继承并实现了各自的run方法。同样的run方法,不同的对象调用得到不同的效果。
##多态性
-
多态性是指具有不同功能的函数可以使用相同的函数名,这样即可以以相同的函数名调用不同功能的函数。
-
面向对象方法中对多态性的表述:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。
-
所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
def func(obj): obj.run() func(peo1) func(pig1) func(d1) def func(obj): #obj这个参数没有类型限制,可以传入不同类型的值 obj.run() #调用的逻辑都一样,执行的结果却不一样 func(peo1) func(pig1) func(d1)
-
多态性依赖于:继承,定义统一的接口
##多态性的优势
- 增加了程序的灵活性
以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal) - 增加了程序额可扩展性
通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用