美文网首页
day27-多态和鸭子类型

day27-多态和鸭子类型

作者: 天行_b6d0 | 来源:发表于2020-08-12 14:53 被阅读0次

多态和多态性

多态指的是一类事物有多种形态,比如动物有多种形态:猫、狗、猪

class Animal: #同一类事物:动物
    def talk(self):
        pass
class Cat(Animal): #动物的形态之一:猫
    def talk(self):
        print('喵喵喵')
class Dog(Animal): #动物的形态之二:狗
    def talk(self):
        print('汪汪汪')
class Pig(Animal): #动物的形态之三:猪
    def talk(self):
        print('哼哼哼')

#实例化得到三个对象
>>> cat=Cat()
>>> dog=Dog()
>>> pig=Pig()

多态性指的是可以在不用考虑对象具体类型的情况下而直接使用对象,这就需要在设计时,把对象的使用方法统一成一种:例如cat、dog、pig都是动物,但凡是动物肯定有talk方法,于是我们可以不用考虑它们三者的具体是什么类型的动物,而直接使用.

>>> cat.talk()
喵喵喵
>>> dog.talk()
汪汪汪
>>> pig.talk()
哼哼哼

我们可以定义一个统一的接口来使用这个功能

>>> def Talk(animal):
...     animal.talk()
... 
>>> Talk(cat)
喵喵喵
>>> Talk(dog)
汪汪汪
>>> Talk(pig)
哼哼哼
  • 在python中数据类型就等同于类,也就是一切皆对象。
  • 多态性的好处在于增强了程序的灵活性和可扩展性,比如通过继承Animal类创建了一个新的类,实例化得到的对象obj,可以使用相同的方式使用obj.talk()
>>> class Wolf(Animal): #动物的另外一种形态:狼
...     def talk(self):
...         print('嗷...')
... 
>>> wolf=Wolf() # 实例出一头狼
>>> wolf.talk() # 使用者根本无需关心wolf是什么类型而调用talk
嗷...

鸭子类型

其实我们完全可以不依赖于继承,只需要制造出外观和行为相同对象,同样可以实现不考虑对象类型而使用对象,这正是Python崇尚的“鸭子类型”(duck typing):“如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子”。比起继承的方式,鸭子类型在某种程度上实现了程序的松耦合度,如下

#二者看起来都像文件,因而就可以当文件一样去用,然而它们并没有直接的关系
class Txt: #Txt类有两个与文件类型同名的方法,即read和write
    def read(self):
        pass
    def write(self):
        pass

class Disk: #Disk类也有两个与文件类型同名的方法:read和write
    def read(self):
        pass
    def write(self):
        pass

相关文章

  • day27-多态和鸭子类型

    多态和多态性 多态指的是一类事物有多种形态,比如动物有多种形态:猫、狗、猪 多态性指的是可以在不用考虑对象具体类型...

  • python高级编程第一讲:深入类和对象

    1.鸭子类型和多态 多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚"鸭子类型" 所谓多态:...

  • 第四章 深入类和对象

    一. 鸭子类型和多态 鸭子类型与多态文章详解 如果一个对象实现了__getitem__方法,那python的解释器...

  • python入门系列:深入类和对象

    鸭子类型和多态 引言 在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。 例如,在不使用鸭子类型的语言中...

  • 多态性与鸭子类型

    一,多态性 多态示例 二,鸭子类型 1,定义 2,示例

  • 多态的意义和操作过程

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

  • Python进阶3

    深入类和对象 鸭子类型和多态 引言 在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。 例如,在不使用鸭...

  • 第三章:深入类和对象

    1.鸭子类型和多态 什么是鸭子类型当一只鸟走起路来像鸭子,游泳起来像鸭子,叫起来像鸭子,就可以称这只鸟为鸭子.也就...

  • 第1章面向对象的Javascript

    面向对象的Javascript 1.1动态类型与鸭子类型 1.2多态 1.2.1一段“多态”的javascript...

  • python 鸭子类型和多态

    关于鸭子类型,在百科中是这么描述的:“鸭子类型”的语言是这么推断的:一只鸟走起来像鸭子、游起泳来像鸭子、叫起来也像...

网友评论

      本文标题:day27-多态和鸭子类型

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