面向对象-多态与多态性

多态:同一种事物的多种形态,比如动物有,人,狗,猪。

多态性:不考虑实例类型的情况下直接使用实例

好处:

  1. 以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
  2. 增加程序可扩展性

动态多态性:

import abc
#给以下动物创建父类,只定义方法名,不写功能
class Animal(metaclass=abc.ABCMeta):
    #装饰器规定子类必须有该属性
    @abc.abstractmethod
    def talk(self):
        pass
class People(Animal):
    #重写父类方法
    def talk(self):
        print('say hello')
class Pig(Animal):
    def talk(self):
        print('say wangwang')
class Dog:
    def talk(self):
        print('say aoao')
#实例化
peop1=People()
pig=Pig()
dog1=Dog()
#不考虑对象类型,直接使用实例
peop1.talk()
pig.talk()
dog1.talk()

创建接口,以不变应万变

#实例化
peop1=People()
pig=Pig()
dog1=Dog()
#创建接口,接口内部无需考虑对象类型
def func(animal):
    animal.talk()
#调用接口即可
func(peop1)
func(pig)
func(dog1)

静态多态性,如字符串操作方法'+'

python提倡使用“鸭子类型”,即看着像鸭子,不一定要继承父类

class File:
    def read(self):
        pass
    def write(self):
        pass
#创建Disk类型,创建得像File类型
class Disk:
    def read(self):
        print('disk read')
    def write(self):
        print('disk write')
#创建Text类型,创建得像File类型
class Text:
    def read(self):
        print('text read')
    def write(self):
        print('text write')
disk=Disk()
text=Text()
#使用方法就行File对象一样,read(),write()
disk.read()
disk.write()
text.read()
text.write()

 

posted @ 2018-04-18 09:03  丫丫625202  阅读(135)  评论(0编辑  收藏  举报