美文网首页
34-python中多态

34-python中多态

作者: mingminy | 来源:发表于2017-12-22 13:09 被阅读0次

类具有继承关系,并且子类类型可以向上转型看做父类类型,如果我们从Person派生出StudentTeacher,并都写了一个whoAmI()方法:

class Person(object):    def __init__(self, name, gender):        self.name = name        self.gender = gender    defwhoAmI(self):        return 'I am a Person, my name is %s' % self.nameclass Student(Person):    def __init__(self, name, gender, score):        super(Student, self).__init__(name, gender)        self.score = score    defwhoAmI(self):        return 'I am a Student, my name is %s' % self.nameclass Teacher(Person):    def __init__(self, name, gender, course):        super(Teacher, self).__init__(name, gender)        self.course = course    defwhoAmI(self):        return 'I am a Teacher, my name is %s' % self.name

在一个函数中,如果我们接收一个变量x,则无论该xPerson、Student还是Teacher,都可以正确打印出结果:

def who_am_i(x):

print x.whoAmI()

p = Person('Tim', 'Male')

s = Student('Bob', 'Male', 88)

t = Teacher('Alice', 'Female', 'English')

who_am_i(p)

who_am_i(s)

who_am_i(t)

运行结果:

I am a Person, my name is Tim

I am a Student, my name is Bob

I am a Teacher, my name is Alice

这种行为称为多态。也就是说,方法调用将作用在x的实际类型上。sStudent类型,它实际上拥有自己的whoAmI()方法以及从 Person继承的 whoAmI方法,但调用s.whoAmI()总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止。

由于Python是动态语言,所以,传递给函数who_am_i(x)的参数x不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可:

class Book(object):

def whoAmI(self):

return 'I am a book'

这是动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。

相关文章

  • 34-python中多态

    类具有继承关系,并且子类类型可以向上转型看做父类类型,如果我们从Person派生出Student和Teacher,...

  • iOS中多态,继承,分类,扩展

    多态 多态:不同对象以自己的方式响应相同的消息的能力叫做多态。程序中的多态:父类指针指向子类对象多态的原理 动态绑...

  • 多态

    OC面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。 在使用多态...

  • Swift 多态实现探究

    多态 父类指针指向子类对象 Swift 中多态的实现类似于 c++ 中的虚表 OC 多态实现利用的是 Runtim...

  • c++虚函数

    说到虚函数,首先要讲一下OOP中的多态,多态简单的说就是一个接口,多种实现. 多态分为编译时多态和运行时多态。编译...

  • C++第六篇多态

    C++中的多态性分为编译时多态性和运行时多态性,编译时多态通过函数重载和模板体现,运行多态通过虚函数体现编译、连接...

  • 多态

    多态 对象的多态性。多态在程序中的体现:父类的引用或者接口的引用指向了子类对象多态的好处:提高了代码的扩展性多态的...

  • 多态的意义和操作过程

    多态 首先Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型。以下是维基百科中对鸭子...

  • Java面向对象——多态

    面向对象三大特征: 继承、封装、多态 多态(polymorphism) 多态性是OOP中的一个重要特性,主要是用来...

  • java中多态

    点个关注不迷路~~ 多态是java面向对象思想极为重要的一部分,在学到java多态时,感觉学的特别迷,遂参考了ja...

网友评论

      本文标题:34-python中多态

      本文链接:https://www.haomeiwen.com/subject/ecitgxtx.html