zoukankan      html  css  js  c++  java
  • python之多态

    python之多态

    一、什么是多态?

    • 同一种事物,有多种形态!
    class Animal: #同一类事物:动物
        def talk(self):
            pass
    class Cat(Animal): #动物的形态之一:猫
        def talk(self):
            print('喵喵喵')
    class Dog(Animal): #动物的形态之二:狗
        def talk(self):
            print('汪汪汪')
    class Pig(Animal): #动物的形态之三:猪
        def talk(self):
            print('哼哼哼')
    

    二、多态能带来什么样的特性?

    ​ 多态性的好处在于增强了程序的灵活性和可扩展性,比如通过继承Animal类创建了一个新的类,实例化得到的对象obj,可以使用相同的方式使用obj.talk()

    class Wolf(Animal): #动物的另外一种形态:狼
        def talk(self):
            print('嗷...')
            
            
    wolf=Wolf() # 实例出一头狼
    wolf.talk() # 使用者根本无需关心wolf是什么类型而调用talk
    

    三、多态的本质是什么?

    多态性的本质:在于不同的类中定义有相同的方法名,这样我们就可以不考虑类而统一用一种方式去使用对象,可以通过在父类引入抽象类的概念来硬性限制子类必须有某些方法名

    综上我们得知,多态性的本质在于不同的类中定义有相同的方法名,这样我们就可以不考虑类而统一用一种方式去使用对象,可以通过在父类引入抽象类的概念来硬性限制子类必须有某些方法名

    • 指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化

    • 该装饰器限制子类必须定义有一个名为talk的方法

    • 但凡继承Animal的子类都必须遵循Animal规定的标准

    • 若子类中没有一个名为talk的方法则会抛出异常TypeError,无法实例化

    • 还不能实例化父类

    import abc
    
    # 指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化
    class Animal(metaclass=abc.ABCMeta):
        @abc.abstractmethod # 该装饰器限制子类必须定义有一个名为talk的方法
        def talk(self): # 抽象方法中无需实现具体的功能
            pass
    
    class Cat(Animal): # 但凡继承Animal的子类都必须遵循Animal规定的标准
        def talk(self):
            pass
    
    cat=Cat() # 若子类中没有一个名为talk的方法则会抛出异常TypeError,无法实例化
    

    四、python如何实现多态?(python推行鸭子方法,不推线接口)

    python不是通过继承父类的方法来实现多态的!

    用鸭子类型:(把他们做得长得像就可以了哈哈哈)

    #二者看起来都像文件,因而就可以当文件一样去用,然而它们并没有直接的关系
    class Txt: #Txt类有两个与文件类型同名的方法,即read和write
        def read(self):
            pass
        def write(self):
            pass
    
    class Disk: #Disk类也有两个与文件类型同名的方法:read和write
        def read(self):
            pass
        def write(self):
            pass
    
    obj1 = Txt()
    obj2 = Disk()
    
  • 相关阅读:
    易优CMS:compare的基础用法
    易优CMS:switch的基础用法
    2019年创意可爱卡通小清新教育课件培训PPT模板
    简约清新立体商务年终工作总结汇报动态PPT模板
    中国古风唯美水墨工作计划汇报PPT模板推荐
    新学期教育教学小学家长会PPT模板推荐
    遇见手绘花卉小清新简约通用PPT模板推荐
    简约清新日系你好五月通用PPT模板推荐
    清新简约风格毕业论文答辩PPT模板推荐
    C# 中=>符号的使用
  • 原文地址:https://www.cnblogs.com/hsyw/p/13670217.html
Copyright © 2011-2022 走看看