美文网首页python
举例说明什么是Python鸭子类型

举例说明什么是Python鸭子类型

作者: 给力的昵称 | 来源:发表于2020-04-27 11:12 被阅读0次

    学习python的时候,也知道鸭子类型(ducking typing)这个说法,“当你看到一只鸟走起来像鸭子,游泳起来鸭子,叫起来也像鸭子,那么这只鸟就被称为鸭子类型”,字面上理解了,但是在Python中是如何体验的?这一点还真不太懂。今天在看书,又再次碰到这个玩意,于是决定把这个鸭子类型给整明白。

    按照书上的解释,鸭子类型是多态一种形式,这这种形式中,不管对象属于哪个类,也不管声明的具体接口是什么,只要对象实现了相应的方法,函数就可以在对象上执行操作。好吧,这句话如何理解呢?我们开始吧!

    简单理解什么是多态?

    首先要理解什么是多态,故名思意,多态就是多种状态,不同的对象调用出同一个接口,表现出多种状态。看示例1。

    #示例1
    class Animal():
        def who(self):
            print("I am an Animal")
    class Duck(Animal):
        def who(self):
            print("I am a duck")
    
    class Dog(Animal):
        def who(self):
            print("I am a dog")
    
    class Cat(Animal):
        def who(self):
            print("I am a cat")
    if __name__ == "__main__":
        duck=Duck()
        dog=Dog()
        cat=Cat()
        duck.who()
        dog.who()
        cat.who()
    

    在示例1中,我们定义了duck,dog和cat三个对象,每个对象都实现了who()方法。你看,他们的接口名称都是相同的,他们分别调用who()方法,但有有不同的输出,不同的表现。以下是输出结果:

    I am a duck
    I am a dog
    I am a cat
    

    好了,多态大概就是这么回事了。更详细的解释留在以后的文章吧!

    鸭子类型

    其实一般不会像上面那样去使用多态,更加优雅的写法见示例2。

    #示例2
    #此处省略Animal,Duck,Dog,cat的实现
    
    def func(obj):
        obj.who()
    
    if __name__ == "__main__":
        duck=Duck()
        dog=Dog()
        cat=Cat()
        func(duck)
        func(dog)
        func(cat)
    

    示例2中定义一个函数func(),这个函数对参数有一个要求,那就是参数必须有who()这个方法。不管你是什么对象,是duck对象也好,是dog对象也罢,只管对象实现who()方法就可。这就是鸭子类型,它根本不管你是什么对象,只要你有这个方法,有这个行为,表现得像鸭子,走起来像鸭子,游泳起来鸭子,叫起来也像鸭子,那么尽管你是一只会飞天的猪,也是称为鸭子类型。

    好了,以上就是小编对鸭子类型的理解,如果你有不同的建议,就联系小编一起讨论吧。

    欢迎关注公众号:CVpython,一个专注分享Python教程和CV算法的公众号,欢迎来撩

    相关文章

      网友评论

        本文标题:举例说明什么是Python鸭子类型

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