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

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

    比如:序列类型有多种形态:字符串,列表,元组

          动物有多种形态:人,狗,猪

    import abc
    
    class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
    
        @abc.abstractmethod
    
        def talk(self):
    
            pass
    
     
    
    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')
    

      

    2.多态性

    多态性的概念:指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为。不同的行为就是指不同的实现,即执行不同的函数。

    定义统一的接口

    >>> def func(animal): #参数animal就是对态性的体现

    ...     animal.talk()

    ...

    >>> people1=People() #产生一个人的对象

    >>> pig1=Pig() #产生一个猪的对象

    >>> dog1=Dog() #产生一个狗的对象

    >>> func(people1)

    say hello

    >>> func(pig1)

    say aoao

    >>> func(dog1)

    say wangwang

    2.1多态性的好处

    1.增加了程序的灵活性

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

     2.增加了程序额可扩展性

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

    >>> class Cat(Animal): #属于动物的另外一种形态:猫
    
    ...     def talk(self):
    
    ...         print('say miao')
    
    ...
    
    >>> def func(animal): #对于使用者来说,自己的代码根本无需改动
    
    ...     animal.talk()
    
    ...
    
    >>> cat1=Cat() #实例出一只猫
    
    >>> func(cat1) #甚至连调用方式也无需改变,就能调用猫的talk功能
    
    say miao
    
     
    
    '''
    
    这样我们新增了一个形态Cat,由Cat类产生的实例cat1,使用者可以在完全不需要修改自己代码的情况下。使用和人、狗、猪一样的方式调用cat1的talk方法,即func(cat1)
    
    '''
    
     
    

      

  • 相关阅读:
    10月15日模拟赛题解
    NOIp初赛题目整理
    【meet in the mid】【qbxt2019csp刷题班day1C】birthday
    【字符串】 manacher算法
    【border树】【P2375】动物园
    【border相关】【P3426】 [POI2005]SZA-Template
    【字符串】 Z-algorithm
    【字符串】KMP
    【神奇性质】【P5523】D [yLOI2019] 珍珠
    【线段树】【P5522】[yLOI2019] 棠梨煎雪
  • 原文地址:https://www.cnblogs.com/asaka/p/6758440.html
Copyright © 2011-2022 走看看