python 面向对象:多态和多态性

时间:2019-10-24
本文章向大家介绍python 面向对象:多态和多态性,主要包括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

原文地址:https://www.cnblogs.com/testlearn/p/11731934.html