zoukankan      html  css  js  c++  java
  • python 面向对象:多态和多态性

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

    一、多态

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

    比如动物有多种形态:人、狗、猪

    class Animal(object):
        def talk(self):
            raise AttributeError('子类必须实现这个方法')
    
    
    class People(Animal):  # 动物的形态之一:人
        def talk(self):
            print('say hello')
    
    
    class Dog(Animal):  # 动物的形态之二:狗
        def talk(self):
            print('say wangwang')
    
    
    class Pig(Animal):  # 动物的形态之三:猪
        def talk(self):
            print('say aoao')
    
    
    peo1 = People()
    pig1 = Pig()
    d1 = Dog()
    
    peo1.talk()
    pig1.talk()
    d1.talk()

    二、多态性

    多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以在调用一个函数名的情况下,实现不同的功能。

    在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。

    也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

    class Animal(object):
        def talk(self):
            raise AttributeError('子类必须实现这个方法')
    
    
    class People(Animal):
        def talk(self):
            print('say hello')
    
    
    class Dog(Animal):
        def talk(self):
            print('say wangwang')
    
    
    class Pig(Animal):
        def talk(self):
            print('say aoao')
    
    
    def animalTalk(obj):
        obj.talk()
    
    
    peo = People()
    pig = Pig()
    dog = Dog()
    
    # 向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为
    animalTalk(peo)
    animalTalk(pig)
    animalTalk(dog)

    三、为什么要用多态性(多态性的好处)

    (1)增加了程序的灵活性

      以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如animalTalk(obj)

    (2)增加了程序额可扩展性

      通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用animalTalk(obj)去调用

    再次提醒:多态多态性不要混为一谈!

    多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度) 

    多态性:一种调用方式,不同的执行效果(多态性)

    本文参考:https://www.cnblogs.com/luchuangao/p/6739557.html

  • 相关阅读:
    DES加密/解密
    HMACSha1加密方法
    .Net 计算文件大小函数
    maven项目打包
    08.29
    keep健身计划
    正则验证表单内容
    高德地图API
    Invalid location of tag (div)。
    08.15
  • 原文地址:https://www.cnblogs.com/testlearn/p/11731934.html
Copyright © 2011-2022 走看看