首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈Python鸭子类型

1、什么是“鸭子类型” 2、“鸭子类型”从何而来 2.1 多态 2.2 多态的使用 2.3 鸭子类型产生 3、小结 ?...1、什么是“鸭子类型” Python崇尚“鸭子类型” 对于鸭子模型常见的说法是:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”...例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为"鸭子"的对象,并调用它的"走"和"叫"方法。...account()方法时,程序并不关心为该方法传入的参数对象pay_obj是谁,只要求此参数对象pay_obj包含pay()方法即可,而调用者传入的参数对象类型pay_obj是子类对象还是其他类对象,对Python...不需要类型声明,而java在使用时要定义好类型 (order.account(Payment pay_obj)),所以你传入别的类型对象一定报错 但是python因为是动态语言所以传入的对象只要拥有调用的方法即可视为

2.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

Python 中什么是鸭子类型?

在本教程中,我们将学习鸭子类型。这是 Python 中的一个流行术语,来源于这样一句话:“如果它走路像鸭子,游泳像鸭子,看起来像鸭子,那么它很可能应该是一只鸭子。”...上面的陈述给出了一个识别鸭子的想法。这里我们不需要有鸭子的基因组序列。我们通过它的行为和外观得出结论。 我们将讨论 Python 编程中鸭子类型的确切含义。...Python 遵循的是 EAFP (请求原谅比请求允许更容易)而不是 LBLY (三思而后行)的哲学。EAFP 与“鸭子类型”风格有些联系。...动态与静态类型 使用鸭式打字的主要原因是为了在 Python 编程中提供动态打字的支持。...在下面的例子中,我们试图用 Swift 代替 Python 做同样的事情。

26140

python3之鸭子类型

鸭子类型 简单的跟大家聊一聊python中的鸭子类型,通过一个例子来理解就很简单了。 一句话:“当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也想鸭子,那么这只鸟就可以被称为鸭子。”...,也就是我并不关心对象什么类型,到底是不是鸭子,只关心行为。 假如定义了一个函数,传入一个类对象,我们并不需要知道这个类对象是不是我们想要的类对象,只要他有需要的方法,那么这个函数就可以执行。...# 1、定义两个类型,一个是鸭子类,一个是人类,他们都拥有“走”和“游泳”的方法 class Duck(): def walk(self): print("I'm a duck,...print("This one walk like a duck") def swim(self): print("This one swim like a duck") # 鸭子类型...python中的鸭子类型 a = [1, 2, 3] b = (4, 5, 6) # 元组 c = "123" # 字符串 d = {"a": 100} # 字典 e = 1 # int a.extend

76510

Python:多态、协议和鸭子类型

然而,Python 语言没有 interface 关键字,就是说,Python 里没有像 java、C# 一样的接口。...对于多态,Python 有更好的实现方式——鸭子类型(duck typing)。 协议和鸭子类型 所谓 鸭子类型 就是:如果一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么它就是鸭子。...这样就好理解鸭子类型了,“如果一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子” 这就表示已经遵守了协议,“那么它就是鸭子”,意味着你可以在其他用到“鸭子”的地方,用“这只鸟”替换。...Python 中的协议举例 Python 中有很多的协议,比如迭代器协议,任何实现了 __iter__ 和 __next__ 方法的对象都可称之为迭代器,但对象本身是什么类型不受限制,这得益于鸭子类型。...Python 不是不支持多态,而是 Python 本身就是一门多态的语言。

98920

鸭子类型

正文 学习 Python 的时候经常看到一个名词:鸭子类型,网上最常见的解释是:如果它走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子(If it walks like a duck and quacks...但仅仅通过这一解释并没有办法让我很好的理解到底何为鸭子类型,于是我从网上找了一些案例来更好的理解: Python 中任何实现了 __iter__ 和 __next__ 方法的对象都可以成为迭代器。...# python3 # 例子来源:FOOFISH-PYTHON 之禅 class Foo: def __iter__(self): pass def __next...,被称为「鸭子」的对象本身是很么类型不重要,重要的是它完成了「鸭子」所能完成的一切,所以它就配得上「鸭子」这个称呼。...所以我认为(不要你以为,我要我以为,哈哈):在(任何语言的)编程中能够套用上面逻辑的对象都可以成为鸭子类型。 参考 FOOFISH-PYTHON之禅-Python:动态语言与鸭子类型

39710

什么是鸭子🦆类型?

什么是鸭子类型 鸭子类型是很多面向对象(OOP)语言中的常见做法。它的名字来源于所谓的“鸭子测试”: 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。...为什么需要鸭子类型 在一些动态语言中,鸭子类型的常见用法就是假设给定值符合我们预期的,你可以先尝试执行一个操作,然后我们再去处理不符合预期的情况下的异常。...比如在下面这段 Python 代码中: from typing import Any def is_duck(value: Any) -> bool: try: value.quack()...在 Python 中,try-except 是一种常见的写法,它也被很多库(比如hasattr)广泛使用。...简单的说,就是告诉编译器这个可能是鸭子的东西就是一只鸭子

1.9K20

鸭子类型

鸭子类型(duck typing) 在程序设计中,鸭子类型(duck typing)是动态类型的一种风格。...这个概念的名字来源于由 James Whitcomb Riley 提出的鸭子测试,“鸭子测试”可以这样表述: 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。...在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。 例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭子的对象,并调用它的走和叫方法。...鸭子类型通常得益于不测试方法和函数中参数的类型,而是依赖文档、清晰的代码和测试来确保正确使用。...从静态类型语言转向动态类型语言的用户通常试图添加一些静态的(在运行之前的)类型检查,从而影响了鸭子类型的益处和可伸缩性,并约束了语言的动态特性(Python 文档中有一句:鸭子类型应避免使用 type(

55341

Python 中的鸭子类型和猴子补丁

原文链接: Python 中的鸭子类型和猴子补丁 大家好,我是老王。...Python 开发者可能都听说过鸭子类型和猴子补丁这两个词,即使没听过,也大概率写过相关的代码,只不过并不了解其背后的技术要点是这两个词而已。...鸭子类型 引用维基百科中的一段解释: 鸭子类型(duck typing)在程序设计中是动态类型的一种风格。...更通俗一点的说: 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。 也就是说,在鸭子类型中,关注点在于对象的行为,能作什么;而不是关注对象所属的类型。...Python 是一门动态语言,没有严格的类型检查。只要 Duck 和 Dog 分别实现了 eat 和 walk 方法就可以直接调用。

56600

鸭子类型:Python中的灵活多态性

引言在Python编程世界中,有一种特殊的类型,被戏称为“鸭子类型”。这个概念源自一句格言:“如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子。”...这种理念在Python中得以充分体现,它让我们在编写代码时更加关注对象的行为,而不是对象的类型。本文将深入探讨鸭子类型在Python中的应用,以及如何利用这一特性编写更加灵活、可复用的代码。1....3.2 鸭子类型与迭代器在Python中,迭代器是鸭子类型的一个典型应用。迭代器对象必须实现__iter__()和__next__()方法,但不需要显式地继承任何特定的接口或类。...结语鸭子类型是Python中一种强大的编程理念,它使得我们能够编写更加灵活、可复用的代码,不受类型限制的约束。通过关注对象的行为,我们可以写出更加通用、简洁的代码,提高了代码的可读性和可维护性。...在你的Python编程旅程中,不妨多多尝试鸭子类型,体验它的便利之处。无论是函数参数、迭代器还是其他场景,鸭子类型都可以为你的代码带来更多可能性。希望本文对你理解鸭子类型有所帮助。

32440

不知道鸭子类型就当没学过python

本文主要介绍如何用python鸭子类型的实现方式,用魔法函数来实现自定义类,想歪的同学快出去面壁思过,所需基础可参考本公众号之前的文章。...python中万物皆对象实现机制 python中如何实现自定义序列类型 python元类编程 ✨ 回顾一下之前讲到的python中的万物皆对象的实现机制 在python中,函数和类也是对象,属于python...魔法函数贯穿了python的面对对象实现机制 这里就不得不介绍鸭子类型,鸭子类型简单点来说,就是如果你具有鸭子的属性,那你就是鸭子。比如,鸭子会嘎嘎叫,鸭子会两只脚走路。...那么你如果实现了这两个方法,那么就可以说这个类型是鸭子类。这一点和许多静态语言是相反的,静态语言往往是先定义一个实体,再去描述实体的属性和方法。...鸭子类型的特性是根据魔法函数来实现的,决定了该class可以如何被使用。

52120

python面向对象-封装-property-接口-抽象-鸭子类型-03

被封装内容的特点 外界不能直接访问 类内部依然可以使用 权限 利用好封装的特性就可以控制属性的权限(接着往下看) python中只有两种权限 1.公开的属性或方法(默认就是公开的) 2.私有的属性或方法...而贴心的python提供了 property装饰器 property 好处 # property 装饰器可以解决上面的问题,把方法伪装成属性,让私有属性与普通属性的调用方式一致 property 有三种装饰器...d = D() # 把抽象类的方法都实现了,不会报错 鸭子类型 由来:python 一般不会限制你必须怎么写,作为一个优秀的程序员,就应该自觉遵守相关协议,所以就有了鸭子类型这一说 如果这个对象长得像鸭子...(属性),走路像鸭子(方法),那么他就是鸭子(没有说必须方方面面都像) 鸭子类型:拥有相同属性和方法,那么就可以把它看成同样的类,也可以提高扩展性 代码案例 # 默认按USB标准制作鼠标 class...接口与抽象类小结: 小结: 接口是一套协议规范,明确子类们应该具备哪些功能 抽象类是用于强制要求子类必须按照协议中的规定来(接口中定义的)实现 然而python 不推崇限制你的语法,我们可以设计成鸭子类型

53920

面试扣分点:什么是鸭子类型

这就像是我看到了一只鸟,只要它能像鸭子一样叫,像鸭子一样走路,有鸭子一样的白色羽毛,那么,无论它实际上是什么东西,我都认为它是鸭子。 说完这段话,一道光从你的镜片上一闪而过。你心里想,这下稳了。...那是不是说明接口类型等于鸭子类型? 你一时回答不上来。 面试官又问:那接口类型和鸭子类型是什么关系?鸭子类型是像int、string、map这样内置的类型吗?...当他把鸭子类型和整型、字符串类型合在一起说的时候,让你觉得鸭子类型也是一种类型。但实际上鸭子类型并不是一种类型,鸭子类型是一种动态类型的风格: ? 怎么解释什么叫做设计风格呢?...我们再用 Python 举个例子: 确保传入的变量必须是特定类型,再执行对应的方法 # 确保参数是特定类型再调用里面的方法 def check(animal): if isinstance(animal...如果这个对象没有eat方法,Python 自动就会抛出异常。 def check(animal): animal.eat() 在鸭子类型这种设计风格中,开发者不关心对象是什么类型。

75040

Python中的协议 、鸭子类型 、 抽象基类 、混入类

本篇文章探讨一下python中的几个概念:协议 、鸭子类型 、 抽象基类 、混入类。 一、协议 在python中,协议是一个或一组方法。...二、鸭子类型(duck typing) 多态的一种形式,在这种形式中,对象的类型无关紧要,只要实现了特定的协议即可。...因此我们可以把Eg1称为一个鸭子类型,即 只关注它是否实现了相应的协议,不关注它的类型。...注意,自己定义的抽象基类要继承 abc.ABC(abc.ABC 是 Python 3.4 新增的类,python2的语法不是这样的)。...最近热门文章 用Python更加了解微信好友 如何用Python做一个骚气的程序员 用Python爬取陈奕迅新歌《我们》10万条评论的新发现 用Python分析苹果公司股价数据 Python自然语言处理分析倚天屠龙记

1.8K20

你知道什么是Python里的鸭子类型和猴子补丁吗?

有时候我们会听到Python里所谓的鸭子类型和猴子补丁的说法,乍一听还以为是来到了动物园,Python这只大蟒蛇还可以和鸭子和猴子一起玩耍?...非也非也,鸭子类型和猴子补丁实际上是两个生动有趣的比喻,用来说明Python的动态特性。 鸭子类型?(duck type) 是对Python中数据类型本质上是由属性和行为来定义的一种解读。 猴子补丁?...一,鸭子类型 鸭子类型是对Python中数据类型本质上是由属性和行为来定义的一种解读。 Python是一种动态语言,不像Java和C++这种强类型语言,Python里实际上没有严格的类型检查。...只要某个对象具有鸭子的方法,可以像鸭子那样走路和嘎嘎叫,那么它就可以被其它函数当做鸭子一样调用。...是动态语言,其数据类型属于鸭子类型,没有严格类型检查, # Goose这个类具有和Duck这个类相同的方法, # ee这只鹅划起水来像只鸭子,叫起来也像一只鸭子, # 所以duckshow这个函数也可以对

2.5K20

面向对象:接口思想、多态、鸭子类型、反射

老师执行的是下班操作,学生执行的是放学操作,虽然二者消息一样,但是执行的效果不同 总结:多态性的好处: 增加了程序的灵活性:以不变应万变,不论对象千变万化,使用者都是同一种形式去调用 增加了程序的可扩展性 三、鸭子类型...如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子 #二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用 class TxtFile: def read(self):...> (1, 2) {'a': 3, 'b': 4} 六、异常处理 程序运行时的错误 程序中的异常处理机制: 程序中的所有异常都会被处理 程序中的所有异常都需要手动处理 如果没有手动处理异常,异常会交给Python

42330

语言设计中的鸭子类型风格

image.png #思特沃克好声音# (图片:网络) 在动态语言的世界里一直流传着一种叫做鸭子类型的风格,其来自谚语:“如果行鸭子一样走路,像鸭子一样呱呱叫,那它就是一只鸭子”。     ...从鸭子类型,我们可以联想到它的推导,并不在乎类型的真正实体,只要他的行为有鸭子的特性,那么我们就可以把它当做一只鸭子来看到。...鸭子类型在动态语言中被广为奉行。某类接口需要一个log接口,换句话说这借口中需要调用传入对象的log,方法,在动态语言中无论你传入的是什么对象,只有具有log方法则就是合法的。...关于鸭子型风格这里还得必须提到go语言,也是go语言带来我对这种风格的思考。...(I).Get() }    Go语言不同于其他鸭子类型语言的是它实现了在编译时期检查,同时也不失这种自由度。

78970

鸭子测试看 Go 语言的接口实现

翻译成中文是:「如果一只鸟它走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。」 这便是「鸭子测试」,它是一种判定思想。...中文:「当我看到一只鸟像鸭子一样走路,像鸭子一样游泳,像鸭子一样呱呱叫,我就叫它鸭子。」 无法确定莱利写这句诗的具体时间,不过绝不会晚于 1916 年,因为这一年莱利人去世了。...但当我看见一只鸟叫得像鸭子,游得像鸭子,也走得像鸭子,长着羽毛也有脚蹼,还和鸭子在一起,那我当然会判断它是个鸭子。」 这句话很讽刺,且无理。...鸭子类型有时候在动态语言中,被用于实现多态。下面看一个多态的例子,它是Python语言的。...最后,留一个问题给你:玩具大黄鸭经过「鸭子测试」的判定,被当成了鸭子,但其实它不是鸭子,如果有一天有人要给它喂食,还要它下蛋,怎么办?

46010
领券