首页 > 代码库 > python\多态与多态性

python\多态与多态性

1.多态的概念:多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的的概念依赖于继承)

比如:序列类型有多种形态:字符串,列表,元组

      动物有多种形态:人,狗,猪

import abc

class Animal(metaclass=abc.ABCMeta): #同一类事物:动物

    @abc.abstractmethod

    def talk(self):

        pass

 

class People(Animal): #动物的形态之一:人

    def talk(self):

        print(‘say hello‘)

 

class Dog(Animal): #动物的形态之二:狗

    def talk(self):

        print(‘say wangwang‘)

 

class Pig(Animal): #动物的形态之三:猪

    def talk(self):

        print(‘say aoao‘)

 

 

2.多态性

多态性的概念:指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为。不同的行为就是指不同的实现,即执行不同的函数。

技术分享

定义统一的接口

技术分享

>>> def func(animal): #参数animal就是对态性的体现

...     animal.talk()

...

>>> people1=People() #产生一个人的对象

>>> pig1=Pig() #产生一个猪的对象

>>> dog1=Dog() #产生一个狗的对象

>>> func(people1)

say hello

>>> func(pig1)

say aoao

>>> func(dog1)

say wangwang

2.1多态性的好处

1.增加了程序的灵活性

 以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)

 2.增加了程序额可扩展性

 通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用   

>>> class Cat(Animal): #属于动物的另外一种形态:猫

...     def talk(self):

...         print(‘say miao‘)

...

>>> def func(animal): #对于使用者来说,自己的代码根本无需改动

...     animal.talk()

...

>>> cat1=Cat() #实例出一只猫

>>> func(cat1) #甚至连调用方式也无需改变,就能调用猫的talk功能

say miao

 

‘‘‘

这样我们新增了一个形态Cat,由Cat类产生的实例cat1,使用者可以在完全不需要修改自己代码的情况下。使用和人、狗、猪一样的方式调用cat1的talk方法,即func(cat1)

‘‘‘

 

python\多态与多态性