zoukankan      html  css  js  c++  java
  • 面向对象的三大特性之----------多态

    什么是多态

    谈到多态肯定是和继承结合在一起的,本质是子类通过覆盖或重载(覆重)父类的方法,来使得对同一类对象同一方法的调用产生不同的结果。

    如:

    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')
    
    peo=People()
    dog=Dog()
    pig=Pig()
    
    #peo、dog、pig都是动物,只要是动物肯定有talk方法
    #于是我们可以不用考虑它们三者的具体是什么类型,而直接使用
    peo.talk()
    dog.talk()
    pig.talk()
    
    #更进一步,我们可以定义一个统一的接口来使用
    def func(obj):
        obj.talk()
    
    func(peo)
    func(dog)
    func(pig)
    class Position:
        def __init__(self, name, height):
            self.name = name
            self.height = height
    
        def distribut(self):
            if float(self.height) <= 1.91:
                print('%s应该打控卫' % self.name)
            if 1.91 < float(self.height) <= 2.01:
                print('%s应该打分卫' % self.name)
            if 2.01< float(self.height) <= 2.07:
                print('%s应该打小前锋' % self.name)
            if 2.07 < float(self.height) <= 2.10:
                print('%s应该打大前锋' % self.name)
            if 2.10< float(self.height):
                print('%s应该打中锋' % self.name)
    
    p1 = Position('lebron_james', '2.03')
    p2 = Position('kevin_durant', '2.08')
    p3 = Position('stphen_curry', '1.91')
    p4 = Position('dwyne_wade', '1.93')
    p5 = Position('anthony_davis', '2.13')
    
    def pst(player):
        return player.distribut()
    
    pst(p1)
    pst(p2)
    pst(p3)
    pst(p4)
    pst(p5)
    
    >>>
    lebron_james应该打小前锋
    kevin_durant应该打大前锋
    stphen_curry应该打控卫
    dwyne_wade应该打分卫
    anthony_davis应该打中锋

    多态的好处

    1.增加了程序的灵活性

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

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

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

  • 相关阅读:
    sublime如何自动保存
    什么是DQL、DML、DDL、DCL
    Linux Shall命令入门
    省市区地址三级联动jQuery插件Distpicker使用
    ThinkPHP3.2设置404跳转页面
    File.separator
    HiddenHttpMethodFilter
    SpringMVC环境搭建
    JVM介绍(一)
    some characters cannot be mapped using iso-8859-1 character encoding
  • 原文地址:https://www.cnblogs.com/cjsword/p/10618121.html
Copyright © 2011-2022 走看看