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...

  • 相关阅读:
    [LeetCode] 303. 区域和检索
    [LeetCode] 120. 三角形最小路径和 ☆☆☆(动态规划 范例)
    [LeetCode] 18. 四数之和 ☆☆☆(双指针)
    [LeetCode] 16. 最接近的三数之和 ☆☆☆(双指针)
    [LeetCode] 109. 有序链表转换二叉搜索树 ☆☆☆(递归)
    优惠券模块设计要点
    nginx upstream 实现负载均衡
    nginx fastcgi配置
    nginx rewrite规则
    nginx Location 配置
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349602.html
Copyright © 2011-2022 走看看