美文网首页
Python学习之路(面向对象之继承和多态)

Python学习之路(面向对象之继承和多态)

作者: 55lover | 来源:发表于2018-01-05 10:11 被阅读0次

面向对象之继承和多态

继承 子类继承父类所有功能

class Animal(object):
    def run(self):
        print('animal is running...')
# 创建Animal实例
animal = Animal()
animal.run()

# Dog类
class Dog(Animal):
    pass

# 创建Dog 实例

dog = Dog()

# 调用Dog类继承来自于Animal类的run方法
dog.run() 

现在我有這样一个需求 就是 不同子类继承父类调用run(),输出不同的信息,那么我们就需要在子类里边重新定义该方法来覆盖父类中的方法,這叫做多态

# Cat类 继承 Animal
class Cat(Animal):
    def run(self):
        print('cat is running...')

cat = Cat()
cat.run()

class Monkey(Animal):
    def run(self):
        print('Monkey is running...')
monkey = Monkey()
monkey.run()
# 现在输出了不同信息,但是每次都要写這么多,感觉多态也挺麻烦的,那我们再优化下:

print('-------------------------------------')
def _run(animal):
    animal.run()
    animal.run()

_run(Dog())
_run(Cat())
_run(Monkey())

# 這样就体现出多态的好处了 
# 我们也可以还派生出一些类来, 比如:
class Tortoise(Animal):
    def run(self):
        print('Tortoise is running slowly...')
_run(Tortoise())

静态语言Java和动态语言Python的区别:
对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法
对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了:
这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。 证明:

print('--------------------------------------')

class Rabbit(object):
    def run(self):
        print('Rabbit is running...')

_run(Rabbit()) # Rabbit is running...

小结

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

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

关注一波!喜欢一波!本人是前端菜鸟,正在做自己的个人博客邓鹏的博客,欢迎来交流学习, 使用的技术 vue + koa2 + mysql + php + nginx!

相关文章

  • Python学习之路(面向对象之继承和多态)

    面向对象之继承和多态 继承 子类继承父类所有功能 现在我有這样一个需求 就是 不同子类继承父类调用run(),输出...

  • Python精简入门学习(十六)

    Python精简入门学习之面向对象三大特性 -oop三大特性 -封装 -继承 -多态

  • Python面向对象-多态

    面向对象的三大特性 封装 继承 多态 python学习过程中,封装继承将随处可见,但却很少遇见多态,那么pytho...

  • day3-python3类

    今天了解了python3中的面向对象编程 包括: 属性和封装 继承和多态 获取对象信息 练习代码链接:python...

  • Python面向对象编程(下)

    数据封装、继承和多态是面向对象程序设计中最基础的3个概念,今天学习下Python中的高级特性——多重继承、定制类、...

  • python面向对象特性之封装

    面向对象——封装 一、概述 Python面向对象的三大特性:封装、继承和多态。 封装:在类中对数据的赋值、内部调用...

  • Python面向对象封装

    面向对象——封装 一、概述 Python面向对象的三大特性:封装、继承和多态。 封装:在类中对数据的赋值、内部调用...

  • 面对对象高级编程

    面向对象高级编程: 面向对象编程:封装、继承和多态 面向对象高级编程:多重继承、定制类和元类

  • Python中面向对象的第二大特征——继承

    Python中面向对象有三大特征:封装,继承,多态 今天就说说面向对象中的第二大特征——继承 一丶什么是继承 ...

  • js-继承和闭包

    继承和闭包 一、面向对象的三大特征 封装 继承 多态 二、什么是继承 继承是面向对象软件技术当中的一个概念,与多态...

网友评论

      本文标题:Python学习之路(面向对象之继承和多态)

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