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

浅谈Python鸭子类型

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

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

鸭子类型

正文 学习 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:动态语言与鸭子类型

37810

鸭子类型

鸭子类型(duck typing) 在程序设计中,鸭子类型(duck typing)是动态类型一种风格。...在鸭子类型中,关注不是对象类型本身,而是它是如何使用。 例如,在不使用鸭子类型语言中,我们可以编写一个函数,它接受一个类型鸭子对象,并调用它走和叫方法。...在使用鸭子类型语言中,这样一个函数可以接受一个任意类型对象,并调用它走和叫方法。如果这些需要被调用方法不存在,那么将引发一个运行时错误。...鸭子类型通常得益于不测试方法和函数中参数类型,而是依赖文档、清晰代码和测试来确保正确使用。...从静态类型语言转向动态类型语言用户通常试图添加一些静态(在运行之前类型检查,从而影响了鸭子类型益处和可伸缩性,并约束了语言动态特性(Python 文档中有一句:鸭子类型应避免使用 type(

54141

Python 中什么是鸭子类型

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

18940

什么是鸭子🦆类型

什么是鸭子类型 鸭子类型是很多面向对象(OOP)语言中常见做法。它名字来源于所谓鸭子测试”: 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。...我们不用关心鸭子定义是什么,只要符合我们通常意义上认知,那么他就是这个物体。在 TypeScript 中,只要对象符合定义类型约束,那么我们就可以视为他是。...鸭子类型 通常用于需要处理一系列不同数据代码中,我们可能不知道调用者要传递哪些参数。在一些 switch 语句或复杂 if/else 判断中,通常是 鸭子类型 可能派上用场地方。...为什么需要鸭子类型 在一些动态语言中,鸭子类型常见用法就是假设给定值符合我们预期,你可以先尝试执行一个操作,然后我们再去处理不符合预期情况下异常。...在 Python 中,try-except 是一种常见写法,它也被很多库(比如hasattr)广泛使用。

1.7K20

python3之鸭子类型

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

75010

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

对于多态,Python 有更好实现方式——鸭子类型(duck typing)。 协议和鸭子类型 所谓 鸭子类型 就是:如果一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么它就是鸭子。...这个概念名字来源于 James Whitcomb Riley 提出鸭子测试。 初次看到这个描述小伙伴一定一头雾水,为了理解鸭子类型,我们不得不提到另一个名词——协议。...这样就好理解鸭子类型了,“如果一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子” 这就表示已经遵守了协议,“那么它就是鸭子”,意味着你可以在其他用到“鸭子地方,用“这只鸟”替换。...用“鸭子类型”来实现策略模式也很简单,删掉抽象基类就可以了。(这就是为什么抽象基类很少使用原因,因为删掉代码也一样正确啊。)有兴趣小伙伴可以自己尝试一下代码。...Python协议举例 Python 中有很多协议,比如迭代器协议,任何实现了 __iter__ 和 __next__ 方法对象都可称之为迭代器,但对象本身是什么类型不受限制,这得益于鸭子类型

97320

Python鸭子类型和猴子补丁

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

55300

鸭子类型Python灵活多态性

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

28040

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

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

50920

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

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

1.8K20

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

鸭子类型是像int、string、map这样内置类型吗?我们可以在 Golang 里面使用var a string 声明一个类型为string变量,那请问怎么声明一个类型鸭子变量?...当他把鸭子类型和整型、字符串类型合在一起说时候,让你觉得鸭子类型也是一种类型。但实际上鸭子类型并不是一种类型鸭子类型是一种动态类型风格: ? 怎么解释什么叫做设计风格呢?...我们再用 Python 举个例子: 确保传入变量必须是特定类型,再执行对应方法 # 确保参数是特定类型再调用里面的方法 def check(animal): if isinstance(animal...不管传入参数是什么类型,只要它有 eat方法都能执行。如果这个对象没有eat方法,Python 自动就会抛出异常。...总结:鸭子类型是一种设计风格,不是一种具体类型

73040

语言设计中鸭子类型风格

image.png #思特沃克好声音# (图片:网络) 在动态语言世界里一直流传着一种叫做鸭子类型风格,其来自谚语:“如果行鸭子一样走路,像鸭子一样呱呱叫,那它就是一只鸭子”。     ...从鸭子类型,我们可以联想到它推导,并不在乎类型真正实体,只要他行为有鸭子特性,那么我们就可以把它当做一只鸭子来看到。...在动态语言设计中,可以解释为无论一个对象是什么类型,只要它具有某类型行为(方法),则它就是这一类型实例,而不在于它是否显示实现或者继承。      鸭子类型在动态语言中被广为奉行。...(I).Get() }    Go语言不同于其他鸭子类型语言是它实现了在编译时期检查,同时也不失这种自由度。    ...他为javascript引入接口,类型,泛型等较完备类型系统,是的能够有更好IDE支持,从某种程度上来说,这是对鸭子类型或者javascript编译器检查推迟弥补。

77170

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

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

2.5K20

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

,控制私有属性(加权限)) a.key = 987 print(a.key) # 987 python 实现封装原理 # 就是在加载类时候,把 __ 替换成了 _类名__属性(替换属性名称) python...d = D() # 把抽象类方法都实现了,不会报错 鸭子类型 由来:python 一般不会限制你必须怎么写,作为一个优秀程序员,就应该自觉遵守相关协议,所以就有了鸭子类型这一说 如果这个对象长得像鸭子...(属性),走路像鸭子(方法),那么他就是鸭子(没有说必须方方面面都像) 鸭子类型:拥有相同属性和方法,那么就可以把它看成同样类,也可以提高扩展性 代码案例 # 默认按USB标准制作鼠标 class.... # 键盘关闭了 上面的案例中依然没有改变pc中代码,而Mouse、KeyBoard这样类也可以直接交给pc使用,他们看起来用起来都像是前面写USB接口协议,所以他们就是鸭子类型 接口与抽象类小结...: 小结: 接口是一套协议规范,明确子类们应该具备哪些功能 抽象类是用于强制要求子类必须按照协议中规定来(接口中定义)实现 然而python 不推崇限制你语法,我们可以设计成鸭子类型,既让多个不同类对象具备相同属性和方法

52920

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

一、接口思想 建立关联桥梁,方便管理代码 接口思想提现:为类拓展功能 接口类:用来定义功能类,为继承它子类提供功能。...,使用者都是同一种形式去调用 增加了程序可扩展性 三、鸭子类型 如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子 #二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用 class TxtFile...# ..... ''' 五、内置方法 ''' 1__str__: 在对象被打印时自动触发,可以用来定义对象被打印时输出信息 # 注意:必须返回一个字符串类型值 class People:...程序中异常处理机制: 程序中所有异常都会被处理 程序中所有异常都需要手动处理 如果没有手动处理异常,异常会交给Python解释器处理 处理方式就是打印异常信息,并停止接收器 异常信息三部分:...异常追踪信息:提示错误位置 异常类型:告知处理异常应该捕获什么类型 异常内容:告知错误信息 处理异常语法: try: #会出现异常代码块 except '异常类型' as '异常别名

41730

Py测开《多态和鸭子类型区别》

目录 一、面向对象编程三大特征 二、什么是多态 三、实现多态步骤 1.Python中函数参数是没有类型限制 2.子类对象是不是属于这个父类 3.实现伪多态 四、多态意义 五、鸭子类型 1.鸭子类型体现...二、什么是多态 严格来说,Python中是没有多态,但是Python中可以实现伪多态,Python中函数参数是没有类型限制Python中有个鸭子类型,比多态更厉害。...注意:Python中函数参数是没有类型限制,所以多态在Python体现并不是很严谨。多态概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。...这叫做鸭子类型。 自己定义类里面,只要实现了这个里面的方法: Python多态都是伪多态,因为函数参数都没类型限制,严格意义来说就没有多态。多态和鸭子类型差不多。...Python鸭子类型开放性更好,只要对象里面实现了某个方法,看起来和它一样可以用就行了。

46310

设计模式之策略模式(Strategy Pattern)引子设计原则1提取鸭子行为设计原则2实现鸭子行为整合实现我们设计鸭子类策略模式总结

引子 假设我们现在要设计一个鸭子类Duck类,然后让不同鸭子继承于它。我们把目光聚焦到鸭子行为上。...利用继承来提供鸭子行为,会导致下面这些后果: 代码在多个子类中重复,如果两类不同鸭子需要同一种fly行为,我们就要在两个类里分别覆盖两次,这样万一维护起来是非常困难 很难知道所有鸭子全部行为 运行时行为不容易改变...提取鸭子行为 根据设计原则,鸭子飞行行为会发生变化,所以我们需要将fly行为单独提取出来。同理,我们提取出两个鸭子可能变化行为fly和quack鸭叫。用两组类分别代表fly和quack行为。...** 整合实现我们设计鸭子类 首先,在duck类中加入两个实例变量,分别声明为两个接口类型,每个鸭子对象都会动态设置这些变量以便在运行时引用正确行为类型 ?...//为行为接口类型声明两个引用变量,所有鸭子类都继承它们 FlyBehavior flyBehavior; QuackBehavior quackBehavior;

36630
领券