zoukankan      html  css  js  c++  java
  • 面向对象-多态与多态性

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

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

    好处:

    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()
  • 相关阅读:
    大佬讲话听后感
    P1226快速幂取余
    对拍
    P1017 进制转换
    P1092 虫食算 NOIP2002
    P1003 铺地毯
    P1443 马的遍历
    P1032 字串变换
    P1379 八数码问题
    2-MAVEN 基本命令
  • 原文地址:https://www.cnblogs.com/yaya625202/p/8871831.html
Copyright © 2011-2022 走看看