美文网首页
Mr.Li--python-Linux-继承和多态

Mr.Li--python-Linux-继承和多态

作者: 界面大叔 | 来源:发表于2017-05-31 14:19 被阅读0次

在OPP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类。而被继承的class称为基类或父类。

比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接接打印:

class Animals:

    def run(self):

    print('Animals is running...')

当我们需要编写Dog和Cat类时,可以直接从Animals中继承:

class Dog(Animals):

    pass

class Cat(Animals):

    pass

dog = Dog()

dog.run()

cat = Cat()

在这里Animals时父类,Cat和Dog就是子类,子类能获取父类的功能。

运行的结果是:

Animals is running...

Animals is running...

当子类和父类都存在相同的方法是时,子类会覆盖父类,这样代码在运行的时候,就会调用子类,这样我们就获得了继承 的另一个好处:多态

类是创建实例的模板,而实例是一个一个具体的对象。各个实例拥有的数据互相独立,互相不影响

方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据

使用isinstance():

获取对象继承关系

使用dir();

获得一个对象的所有属性和方法

在编写程序的时候,千万不要把实例属性和类属性使用相同的名字,因为相同名称的实例属性会屏蔽类属性,但当你删除实例属性后,在使用相同的名称,返回的将会是类属性

多态:

继承还可以一级一级地继承下来,就好比从爷爷到爸爸、再到儿子这样的关系。而任何类,最终都可以追溯到根类object,这些继承关系看上去就像一颗倒着的树

继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。

动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。

案例:

classAnimal(object):

defrun(self):

print('Animal is running...')

classDog(Animal):

defrun(self):

print('Dog is running...')

classCat(Animal):

defrun(self):

print('Cat is running...')

defrun_twice(animal):

animal.run()

animal.run()

a=Animal()

d=Dog()

c=Cat()

print('a is Animal?',isinstance(a, Animal))

print('a is Dog?',isinstance(a, Dog))

print('a is Cat?',isinstance(a, Cat))

print('d is Animal?',isinstance(d, Animal))

print('d is Dog?',isinstance(d, Dog))

print('d is Cat?',isinstance(d, Cat))

run_twice(c)

对于一个变量,我们只需要知道它是Animal类型,无需确切地知道它的子类型,就可以放心地调用run()方法,而具体调用的run()方法是作用在Animal、Dog、Cat还是Tortoise对象上,由运行时该对象的确切类型决定,这就是多态真正的威力:调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保run()方法编写正确,不用管原来的代码是如何调用的。这就是著名的“开闭”原则:

相关文章

  • Mr.Li--python-Linux-继承和多态

    在OPP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类。而被继...

  • 周记二

    周一:今天学了继承和多态,继承有public继承、protected继承、private继承,多态和虚函数一对,抽...

  • Python类和实例

    关键词:class 继承和多态:(object) 如果没有其他需要继承的类,则默认继承(object) 多态这里和...

  • 继承和多态

    在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Sub...

  • 继承和多态

    继承和多态 1. 继承的优缺点 优点:(1)子类可以灵活地改变父类中的已有方法;(2)能够最大限度的实现代码重用。...

  • 继承和多态

    在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Sub...

  • 继承和多态

    date: 2016-10-09 18:45:18 这里继承和多态的概念与java的概念差不多。概念还是需要多次理...

  • 继承和多态

    继承是面向对象方法中的一个重要概念。特殊类拥有一般类的属性和操作。称为特殊类对一般类的继承。继承是一种由已有类来扩...

  • 继承和多态

  • 继承和多态

    继承和多态: 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称...

网友评论

      本文标题:Mr.Li--python-Linux-继承和多态

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