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

学习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算法的公众号,欢迎来撩

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值