专栏首页算法channelPython|继承,多态,鸭子类型

Python|继承,多态,鸭子类型

01

继承

编写一个类

class Animal(object):

def shout(self):

print('Animal is shouting...')

继承Animal的Dog:

class Dog(Animal):

def shout(self):

print('Dog is shouting...')

继承Animal的Cat:

class Cat(Animal):

pass

02

多继承(MixIn设计原则)

Java和C#等不允许多继承类,但是Python是可以的。

通过多重继承,一个子类就可以同时获得多个父类的所有功能。

在设计类的继承关系时,通常,主线都是单一继承下来的,例如,Dog继承自Animal。

但是,如果需要定制个性化的功能,通过多重继承就可以实现,比如,让Dog除了继承自Animal外,再同时继承Runnable类,这种设计理念称为MaxxIn原则。

03

多态

dog = Dog()

dog.shout()

结果:

Dog is shouting...

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

04

鸭子类型

class Car(object):

def shout(self):

print('Car is shouting...')

静态语言,如Java,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类Dog或Cat,如果传入Car实例,将无法调用shout()方法。

对于Python这样的动态语言来说,则不一定需要传入Animal类型,只需要保证传入的对象有一个shout()方法就可以了,传入Car实例不报错。

这种,“file-like object“就是一种鸭子类型。

更多相关文章:

Python|高阶函数

Python|生成器

Python|编写自己的类

Python|模块,包,标准模板

Python|闭包

本文分享自微信公众号 - 算法channel(alg-channel),作者:alg-flody

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我分析的一道笔试题,留言说说你是否看懂了?

    集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。

    double
  • 回溯树求集合全排列和所有子集

    本公众号主要推送关于对算法的思考以及应用的消息。算法思想说来有,分而治之,深度搜索,动态规划,回溯,贪心等,结合这些思想再去思考如今很火的大数据,云计算和机器学...

    double
  • BAT面试题40:Python里面如何生成随机数?

    random.randrange(start,stop,[,step]):返回一个范围在(start,stop,step)之间的随机整数,不包括结束值。

    double
  • Android View和 Window 的关系

    本文主要介绍了Android中Window和View的关系,并在用户进程中说明了View的加载过程,最后再简单认识了一下WMS控制、显示Window的主要步骤。

    旺仔小小鹿 .
  • Android高频面试专题 - 提升篇(一)Window、View、Activity

    表示一个窗口的概念,是所有View的直接管理者,任何视图都通过Window呈现(点击事件由Window->DecorView->View; Activity的s...

    Android扫地僧
  • golang中的for range语义的理解

    golang中for range经常会被用来遍历slice、map、chan、array,但是由于在某些情况下,其内部实现并不是你想的那样,所以使用时还是需要特...

    刘斌
  • Java_开发环境搭建(MAC)_02

    ![71AF0D75-9EC8-457F-AC16-FD446F6C1C4F.png](http://upload-images.jianshu.io...

    酷走天涯
  • C语言中的字符串处理库函数介绍与实现

    Zoctopus
  • 这道上台阶的编程题你会不会?(递归和迭代思想)

    one保存最后走1步,two保存最后走2步。循环迭代就是不断修改这两个(one,two)变量的值。

    Wizey
  • Annotation request in WebIDE automatic generated project

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券