zoukankan      html  css  js  c++  java
  • 多态

    要理解什么是多态,我们首先要对数据类型再作一点说明,当我们定义一个class的时候,
    
    我们实际上就定义了一种数据类型,我们定义的数据类型和Python自带的数据类型,比如str,list,dict没什么两样:
    
    
    class Student(object):
        def __init__(self, name, score):
            self.name = name
            self.score = score
    
        def print_score(self):
            print '%s: %s' % (self.name, self.score -2)
    
    
    from   mycompany.web.Student  import *
    c = Student('a',88)
    print c.name
    print isinstance(c, Student)
    print c.print_score()
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/a1.py
    a
    True
    a: 86
    None
    
    a = list() # a是list类型
    b = Animal() # b是Animal类型
    c = Dog() # c是Dog类型
    判断一个变量是否是某个类型可以用isinstance()判断:
    
    >>> isinstance(a, list)
    True
    >>> isinstance(b, Animal)
    True
    >>> isinstance(c, Dog)
    Tru
    
    from   mycompany.web.Dog  import *
    
    c = Dog()
    c.run()
    print isinstance(c, Dog)
    print  isinstance(c, Animal)
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/a1.py
    yy
    Animal is running...
    True
    True
    
    from   mycompany.web.Dog  import *
    
    b = Animal()
    print b.run()
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/a1.py
    yy
    Animal isxx running...
    None
    
    from   mycompany.web.Dog import *
    def run_twice(animal):
        animal.run()
    
    print '----------------'
    run_twice(Animal())
    run_twice(Dog())
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/a1.py
    ----------------
    Animal isxx running...
    Dog isxx running...
    
    Process finished with exit code 0
    
    
    
    看上去没啥意思,但是仔细想想,现在,如果我们再定义一个Tortoise类型,也从Animal派生:
    
    class Tortoise(Animal):
        def run(self):
            print 'Tortoise is running slowly...'
    
    
    
    from   mycompany.web.Tortoise import *
    def run_twice(animal):
        animal.run()
    
    print '----------------'
    run_twice(Animal())
    
    run_twice(Tortoise())
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/a1.py
    ----------------
    Animal isxx running...
    Tortoise is running slowly...
    
    Process finished with exit code 0
    
    
    你会发现,新增一个Animal的子类,不必对run_twice()做任何修改,
    
    实际上,任何依赖Animal 作为的函数的函数或者方法都可以不加修改地正常运行,原因在于多态
    
    
    
    
    
    from   mycompany.web.Tortoise import *
    def run_twice(animal):
        animal.run()
    
    print '----------------'
    run_twice(Animal())
    
    run_twice(Tortoise())
    
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/a1.py
    xxxx
    ----------------
    Animal isxx running...
    Animal isxx running...

  • 相关阅读:
    POI中文API文档
    接口
    JDK中的URLConnection参数详解
    RPC远程过程调用概念及实现
    tkinter 打包成exe可执行文件
    PHP 的命令行模式
    php CLI SAPI 内置Web Server
    ppython的移位操作
    HAProxy基础
    HAProxy用法详解
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349602.html
Copyright © 2011-2022 走看看