zoukankan      html  css  js  c++  java
  • 类的多态和多态性

    很多人喜欢将多态多态性二者混为一谈,然后百思不得其解,其实只要分开看,就会很明朗。

    一、多态

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

    1. 序列数据类型有多种形态:字符串,列表,元组
    2. 动物有多种形态:人,狗,猪
    #多态基础
    class Animal:
        def speak(self):
            pass
    class Pig(Animal):
        def speak(self):	
            print('哼哼哼')
    
    class Dog(Animal):
        def speak(self):	
            print('汪汪')	
    
    class People(Animal):
        def speak(self):	
            print('say hello')
    
    pig=Pig()
    dog=Dog()
    people=People()
    pig.speak()
    dog.speak()
    people.speak()
    

    二、多态性

    注意:多态与多态性是两种概念

    多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

    pig=Pig()
    dog=Dog()
    people=People()
    
    # 使用相同函数,实现多态性
    def animal_speak(obj):
        obj.speak()
    animal_speak(pig)
    animal_speak(people)
    

    综上可以说,多态性是一个接口(函数)的多种实现(如obj.speak(),obj.speak(),obj.speak(),len(speak))

    三、多态性的好处

    其实大家从上面多态性的例子可以看出,我们并没有增加新的知识,也就是说Python本身就是支持多态性的,这么做的好处是什么呢?

    1. 增加了程序的灵活性:以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
    2. 增加了程序额可扩展性:通过继承Animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用

    四、实现接口统一化

    实现接口统一化有两种方式,下面分别介绍

    4.1 使用abc实现接口统一化(约束代码,用的比较少)

    1. import abc.

    2. 在基类括号中写入,如:class 类名(metaclass=abc.ABCMeta):

    3. 在需要约束的方法前,使用语法糖加入@abc.abstractmethod装饰器

    这样当子类继承父类时,必须实现父类约束的方法。否则会报错

    import abc
    #第一在括号中写metaclass=abc.ABCMeta
    class Animal(metaclass=abc.ABCMeta):
        #第二在要约束的方法上,写abc.abstractmethod装饰器
        @abc.abstractmethod
        def speak(self):
            pass
    
    class Pig(Animal):
        def speak(self):	# 不写speak则报错
            print('哼哼哼')
            
    def animal_speak(obj):
        obj.speak()
        
    pig=Pig()
    animal_speak(pig)
    

    哼哼哼

    4.2 使用异常处理来实现接口统一化(常用)

    通过主动抛出异常的方式来实现接口统一化

    #第二种方式,用异常处理来实现(常用)
    class Animal():
        def speak(self):
            #主动抛出异常
            raise Exception('你得给我重写它啊')
    class Pig(Animal):
        def speak(self):
            print('哼哼哼')
    class People(Animal):
        def speak(self):
            print('say hello')
    pig=Pig()
    pe=People()
    def animal_speak(obj):
        obj.speak()
    
    animal_speak(pig)
    animal_speak(pe)
    

    哼哼哼
    say hello

    五、小结

    多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度)
    多态性:一种调用方式,不同的执行效果(多态性)

  • 相关阅读:
    vue 实现背景图片动态绑定
    开发过程中常用英文单词备忘
    IDEA常用快捷备忘
    Spring-Boot学习纪要-8:Spring-Boot自定义starters
    Spring-Boot学习纪要-7:Spring-Boot启动配置原理
    Spring-Boot学习纪要-0:Spring-Boo与数据访问
    Spring-Boot学习纪要-5:Spring-Boot与Docker
    Spring-Boot学习纪要-4:Spring-Boot与Web开发
    Spring-Boot学习纪要-3:Spring-Boot与日志
    Spring-Boot学习纪要-1:Spring-Boot入门
  • 原文地址:https://www.cnblogs.com/XuChengNotes/p/11425391.html
Copyright © 2011-2022 走看看