多态

来源:互联网 发布:mac sdk 环境变量配置 编辑:程序博客网 时间:2024/06/05 13:54
要理解什么是多态,我们首先要对数据类型再作一点说明,当我们定义一个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.nameprint isinstance(c, Student)print c.print_score()C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/a1.pyaTruea: 86Nonea = list() # a是list类型b = Animal() # b是Animal类型c = Dog() # c是Dog类型判断一个变量是否是某个类型可以用isinstance()判断:>>> isinstance(a, list)True>>> isinstance(b, Animal)True>>> isinstance(c, Dog)Trufrom   mycompany.web.Dog  import *c = Dog()c.run()print isinstance(c, Dog)print  isinstance(c, Animal)C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/a1.pyyyAnimal is running...TrueTruefrom   mycompany.web.Dog  import *b = Animal()print b.run()C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/a1.pyyyAnimal isxx running...Nonefrom   mycompany.web.Dog import *def run_twice(animal):    animal.run()print '----------------'run_twice(Animal())run_twice(Dog())C:\Python27\python.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:\Python27\python.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:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/a1.pyxxxx----------------Animal isxx running...Animal isxx running...

原创粉丝点击