zoukankan      html  css  js  c++  java
  • python- 类的多态与多态性

    多态

    多态指的是一类事物有多种形态——如:动物有多种形态:人、狗、猪。

    多态性

      指在不考虑实例类型的情况下使用实例,多态性分为静态多态性和动态多态性。

    静态多态性——任何类型都可以用运算符【+】进行运算。

          eg:字符串+字符串;数字+数字;列表+列表。我们在使用【+】号时也没有考虑类型

    动态多态性如下:

    # 动态多态性
    import abc
    class Animal(metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def eat(self):
            pass
        @abc.abstractmethod
        def run(self):
            pass
    class Dog(Animal):
    
        def eat(self):
            print('is eatting' )
        def run(self):
            print('is running')
    class Pig(Animal):
        def eat(self):
            print('is eatting')
        def run(self):
            print('is running')
    
    dog1 = Dog()
    pig1 = Pig()
    dog1.eat()
    pig1.eat()
    
    # dog、pig 都是动物,只要是动物都有eat run方法
    # 于是我们可以不用考虑它们的具体是什么类型,而直接使用
    #更进一步,我们可以定义一个统一的接口来使用
    def func(obj):
        obj.eat()
    
    func(dog1)
    动态多态性

    动态多态性的意思是我们在使用对象的时候不需要考虑类的类型。

    多态性的好处:

      1、增加程序的灵活性

          使用者都是同一种形式去调用,如func(obj)

      2、增加了程序的额外可扩展性

        通过Animal类创建了一个新的类,使用者不需要修改自己原有的代码,还是用func(obj)去调用。

    import abc
    class Animal(metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def eat(self):
            pass
        @abc.abstractmethod
        def run(self):
            pass
        @abc.abstractmethod
        def talk(self):
            pass
    class Dog(Animal):
    
        def eat(self):
            print('is eatting' )
        def run(self):
            print('is running')
        def talk(self):
            print('wawa')
    class Pig(Animal):
        def eat(self):
            print('is eatting')
        def run(self):
            print('is running')
        def talk(self):
            print('pipi')
    class Cat(Animal):
        def eat(self):
            print('is eatting' )
        def run(self):
            print('is running')
        def talk(self):
            print('maomao')
    
    dog1 = Dog()
    pig1 = Pig()
    cat1 = Cat()
    dog1.eat()
    pig1.eat()
    cat1.talk()
    
    # dog、pig 都是动物,只要是动物都有eat run方法
    # 于是我们可以不用考虑它们的具体是什么类型,而直接使用
    #更进一步,我们可以定义一个统一的接口来使用
    def func(obj):
        obj.eat()
    
    func(cat1)
    创建一个新的了类

    鸭子类型

    python 崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’

  • 相关阅读:
    Bootstrap留言板界面练习
    Bootstrap 学习
    web | [GXYCTF2019]禁止套娃
    re | [GKCTF2020]WannaReverse
    PE文件结构 | 在PE文件的空白区添加代码
    PE文件结构 | RVA与FOA的转换
    re | [NPUCTF2020]BasicASM
    win32 | WinSock2网络编程 | socket-tcp通信
    web | flask 修饰器实现原理
    运维 | 配置LNMP | 基于docker.ubuntu:16.04
  • 原文地址:https://www.cnblogs.com/AYxing/p/8999579.html
Copyright © 2011-2022 走看看