iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python3之鸭子类型
  • 804
分享到

python3之鸭子类型

鸭子类型 2023-01-31 02:01:42 804人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

鸭子类型 简单的跟大家聊一聊python中的鸭子类型,通过一个例子来理解就很简单了。 一句话:“当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也想鸭子,那么这只鸟就可以被称为鸭子。”,也就是我并不关心对象什么类型,到底是不是鸭子

鸭子类型

简单的跟大家聊一聊python中的鸭子类型,通过一个例子来理解就很简单了。

一句话:“当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也想鸭子,那么这只鸟就可以被称为鸭子。”,也就是我并不关心对象什么类型,到底是不是鸭子,只关心行为。

假如定义了一个函数,传入一个类对象,我们并不需要知道这个类对象是不是我们想要的类对象,只要他有需要的方法,那么这个函数就可以执行。

# 1、定义两个类型,一个是鸭子类,一个是人类,他们都拥有“走”和“游泳”的方法
class Duck():
    def walk(self):
        print("I'm a duck, I like walking")
    def swim(self):
        print("I'm a duck, I like swimming")

class Person():
    def walk(self):
        print("This one walk like a duck")
    def swim(self):
        print("This one swim like a duck")
# 鸭子类型:我们并不关心这个对象的类型本身,而是这个类是如何被使用的
def watch(animal):
    animal.walk()
    animal.swim()

duck = Duck()
watch(duck)

person = Person()
watch(person)
I'm a duck, I like walking
I'm a duck, I like swimming
This one walk like a duck
This one swim like a duck

Person类拥有更Duck类一样的方法,当有一个函数调用Duck类,并利用到了两个方法walk()和swim(),我们传入person也是一样可以运行,函数watch并不会检查对象是不是duck,只要他拥有walk和swim方法就可以正确被使用。

class Dog():
    def walk(self):
        print("This dog walk like a duck")
        
dog = Dog()
watch(dog)
This dog walk like a duck



---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<iPython-input-3-f2be48f10ff2> in <module>()
      4 
      5 dog = Dog()
----> 6 watch(dog)


<ipython-input-2-1e37eab770c2> in watch(animal)
      2 def watch(animal):
      3     animal.walk()
----> 4     animal.swim()
      5 
      6 duck = Duck()


AttributeError: 'Dog' object has no attribute 'swim'

以上可以看出,watch函数不会检查对象的类型,而是直接调用这个对象的走和游的方法,如果所需要的方法不存在就会报错。

python中的鸭子类型

a = [1, 2, 3]
b = (4, 5, 6)  # 元组
c = "123"  # 字符串
d = {"a": 100}  # 字典
e = 1  # int

a.extend(b)
print(a)
a.extend(c)
print(a)
a.extend(d)
print(a)
a.extend(e)  # e 不可迭代,无法调用extend函数
print(a)
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, '1', '2', '3']
[1, 2, 3, 4, 5, 6, '1', '2', '3', 'a']



---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-4-5f873275f1f3> in <module>()
     11 a.extend(d)
     12 print(a)
---> 13 a.extend(e)  # e 不可迭代,无法调用extend函数
     14 print(a)
     15 


TypeError: 'int' object is not iterable

可以发现extend方法接收的参数中并不关心你的类型,只要可以迭代,这个函数就可以执行

--结束END--

本文标题: python3之鸭子类型

本文链接: https://www.lsjlt.com/news/185743.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python3之鸭子类型
    鸭子类型 简单的跟大家聊一聊python中的鸭子类型,通过一个例子来理解就很简单了。 一句话:“当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也想鸭子,那么这只鸟就可以被称为鸭子。”,也就是我并不关心对象什么类型,到底是不是鸭子...
    99+
    2023-01-31
    鸭子 类型
  • javascript设计模式之鸭子类型和多态
    目录1.鸭子类型2.多态2.1 java多态2.2 js多态总结本文参考曾探编写的JavaScript设计模式与开发实践 设计模式的实现都遵循一条原则,即“找出程序中变化...
    99+
    2024-04-02
  • python多态协议鸭子类型分析
    本篇内容介绍了“python多态协议鸭子类型分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接口(python 中的协议)的多种不同的实现...
    99+
    2023-06-21
  • python 多态 协议 鸭子类型详解
    接口(python 中的协议)的多种不同的实现方式即为多态。多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。 from abc i...
    99+
    2024-04-02
  • Python中的鸭子类型和猴子补丁怎么使用
    本篇内容主要讲解“Python中的鸭子类型和猴子补丁怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的鸭子类型和猴子补丁怎么使用”吧!鸭子类型引用维基百科中的一段解释:鸭子类...
    99+
    2023-07-06
  • 简单聊聊Python中的鸭子类型和猴子补丁
    目录前言鸭子类型猴子补丁总结前言 Python 开发者可能都听说过鸭子类型和猴子补丁这两个词,即使没听过,也大概率写过相关的代码,只不过并不了解其背后的技术要点是这两个词而已。 我最...
    99+
    2024-04-02
  • Python浅析多态与鸭子类型使用实例
    什么多态:同一事物有多种形态 为何要有多态=》多态会带来什么样的特性,多态性 多态性指的是可以在不考虑对象具体类型的情况下而直接使用对象多态指的是一类事物有多种形态,比如动物有多种形...
    99+
    2024-04-02
  • 面向对象:接口思想、多态、鸭子类型、反射
    一、接口思想 建立关联的桥梁,方便管理代码 接口思想提现:为类拓展功能 接口类:用来定义功能的类,为继承它的子类提供功能的。 该类的功能方法一般不需要有实现体,实现体有继承它的子类自己去实现。 #提供所有看门应该有的功能 cla...
    99+
    2023-01-31
    鸭子 反射 面向对象
  • javascript设计模式中鸭子类型和多态怎么实现
    这篇文章主要介绍“javascript设计模式中鸭子类型和多态怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript设计模式中鸭子类型和多态怎么实现”文章能帮助大家解决问题。1....
    99+
    2023-06-26
  • 如何在 Go 中运行时创建“鸭子类型”grpc protobuf 消息?
    今天编程网给大家带来了《如何在 Go 中运行时创建“鸭子类型”grpc protobuf 消息?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,...
    99+
    2024-04-05
  • Python3基本数据类型之set
    一、定义 set是一个无序且不重复的元素集合。 集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。但是因为...
    99+
    2023-01-31
    数据类型 set
  • python3-数据类型
    1.空值空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值2.在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变...
    99+
    2023-01-31
    数据类型
  • Python3中的bytes类型和str类型
    目录前言:编码发展的历史bytes和str之间的异同前言: Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是Unicode,由str类型表示,二进制...
    99+
    2024-04-02
  • python3之类的 __slots__
    1. 作用  1. 限定一个类创建的实例只能有固定的实例属性(实例变量),不允许对象添加列表以外的实例属性  2. 防止用户因错写属性名称而发生程序错误2. 说明  1. __slots__ 属性是一个列表,列表的值是字符串  2. 含有_...
    99+
    2023-01-31
  • 2.Python3 数据类型
    一、数据类型初识 1、数字2 是一个整数的例子。长整数 不过是大一些的整数。3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。(-5+4j)和(2.3-4.6j)是复数的例子,其中...
    99+
    2023-01-31
    数据类型
  • python3 整数类型PyLongOb
    python3 整数类型PyLongObject 和PyObject源码分析一 测试环境介绍和准备测试环境:操作系统:windows10Python版本:3.7.0 下载地址VS版本:vs2015社区版(免费) 下载地址win10SDK(...
    99+
    2023-01-31
    整数 类型 PyLongOb
  • Python3 数据类型-Number
    说明 数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间。以下实例在变量赋值时 Number 对象将被创建: var1 = 1 var2 = 10 使用del语句删除一些数字对象的引用,del语句的语法是: d...
    99+
    2023-01-31
    数据类型 Number
  • python3的异常类型
    BaseException  +-- SystemExit  +-- KeyboardInterrupt  +-- GeneratorExit  +-- Exception       +-- StopIteration       +--...
    99+
    2023-01-31
    异常 类型
  • Python3的数据类型
      Python提供了强大的内置数据类型,以供程序员使用。除非有特殊原因,我们最好总是使用内置类型作为我们的实现方案。内置的数据对象更快更高效,并且经过了大量的验证,不容易出错。       下面就是Python的内置的数据类型: ...
    99+
    2023-01-30
    数据类型
  • python3类型转换集合
    int 支持转换为 int 类型的,仅有 float、str、bytes,其他类型均不支持。 float -> int 会去掉小数点及后面的数值,仅保留整数部分。 int(-12.94) # -12 str -> in...
    99+
    2023-01-30
    类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作