返回顶部
首页 > 资讯 > 后端开发 > Python >Python 3.7:数据类的介绍
  • 617
分享到

Python 3.7:数据类的介绍

数据Python 2023-01-31 01:01:05 617人浏览 八月长安

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

摘要

        python3.7预计在今年夏天发布,让我们一起偷瞄一眼它带来的新功能吧!如果你经常一个人在家用PyCharm撸代码,请确保将你的Pycharm升级到2018.1版本。(等你读完本文再升级也来得及)。python3.7版


        python3.7预计在今年夏天发布,让我们一起偷瞄一眼它带来的新功能吧!如果你经常一个人在家用PyCharm撸代码,请确保将你的Pycharm升级到2018.1版本。(等你读完本文再升级也来得及)。

python3.7版本包含了众多新特性:比如对各种字符集的升级,推后了对注释的评价等等。其中最受期待的新特性是对数据类装饰器的支持。

什么是数据类

        绝大多数的python开发者都写过许多类,比如下图这样的。 


640?wx_fmt=png&wxfrom=5&wx_lazy=1

        数据类可以自动地给你定义的实例生成“魔术”方法。例如:__init__可以接收参数,并把参数分配给self。上图中的小例子也可以这样写: 

640?wx_fmt=png&wxfrom=5&wx_lazy=1

        其中关键的不同点在于,数据类实际上是要求类型提示的。如果你以前从未用到过类型提示:类型提示允许你标记代码中某一个变量应该是哪种数据类型的。在运行时,变量的数据类型不会被检查,但你可以用Pycharm或者命令行工具比如mypy来静态的检查你的代码。

那么,让我们看看如何使用这个新特性。

星球大战API

        你一定知道当一个电影粉丝用自己最爱的电影的数据创建了一个组REST api会让这个电影的粉丝团热情响应。一个星战粉丝就是这么干的,创建了星球大战API。实际上他做的更完善,直接为这个API创建了一个Python库。

        让我们暂时忘记这个包装库的存在,并探究一下如何创建我们自己的库。

        我们可以用request库从星球大战API中获取资源。

640?wx_fmt=png

        这个终端(和所有终端一样)用JSON格式的信息进行响应。Request库还提供jsON解析。

640?wx_fmt=png

        此时我们把数据存入到了一个字典中,让我们来看一下。

640?wx_fmt=png


封装这个API

        为了正确封装这个API,我们应该创建一个让用户可以在自己的应用使用的对象。所以让我们用Python3.6定义一个对象来存放对/films/终端请求的响应。

640?wx_fmt=png

        细心的读者可能已经注意到了上面的代码有一些冗余,不太细心的读者可以参考一下完整的Python3.6实现(可不短呦)。

这是一个数据类装饰器帮你摆脱困境的经典案例。我们创建了一个用来保存数据,只进行少量验证的类。接下来一起看看有哪些地方需要修改。

        首先,数据类自动的生成一些个魔术方法。如果我们没有指定任何数据类装饰器的选项,则自动生成的魔术方法为:__init__,__eq__,以及__repr__.如果你以及定义了__repr__,而不是__str__,那么python会默认地实现__str__以返回__repr__的输出结果。进而,你只要将代码如下图这样修改一下就得到了四种魔术方法:

640?wx_fmt=png

        在这里我们去掉了__init__方法来确保数据类装饰器可以添加它的子集。不幸的是在这一步中,我们还缺少了一个功能。我们的Python3.6构造函数不仅定义了所有的值,同时它还应该会尝试去解析数据。我们应该如何用数据类来实现这个功能呢?

如果我们重写__init__方法,那么就失去了用数据类的好处。因此,为了实现这些额外的处理,一个新的魔术方法__post_init__就诞生了。一起看下这个方法在我们要封装的对象中长什么样子:

640?wx_fmt=png

大功告成,在数据类装饰器的帮助下,我们仅用了原先1/3行数的代码就实现了我们的类。

更多的好处

    通过使用装饰器的选项,你可以进一步为自己的实例定制数据类。默认的选项是这样的:

640?wx_fmt=png

  • init选项决定是否生成__init__方法。

  • repr选项决定是否生成__repr__方法。

  • eq选项同上,其中__eq__方法定义了检查是否相等的操作。

  • order选项实际上生成了四个用来定义检查大于、小于、and、or操作的魔术方法,设置此项为True,你就可以对对象进行排序

        最后的两个选项决定了你的对象是否能被哈希。这是非常必要的,比如在你想用类的对象作为字典键时。哈希函数应该在对象的生命周期内一直生效,否则存储数据的字典就再也找不到你的对象了。数据类中的__hash__函数将会默认地返回数据类中所有对象的哈希值。因此,只有在你设置对象为只读时(令frozen=True)才会默认地生成__hash__函数。

        一旦使用frozen=True设置了只读属性,任何对你的对象进行写入的操作都会报错。如果你觉得这样太苛刻,并且还是想要确保对象永远不会被改变,那么可以设置unsafe_hash=True来代替frozen=True。数据类装饰器的开发者们不建议这样做。

如果你想更加深入的了解数据类,可以查阅PEP或者直接开始使用数据类玩耍啦。请在评论中告诉我们你都用数据类做了什么!


∞∞∞∞∞



640?wx_fmt=jpeg&wx_lazy=1

IT派 - {技术青年圈}持续关注互联网区块链人工智能领域640?wx_fmt=jpeg&wx_lazy=1



公众号回复“Python”,

邀你加入{ IT派Python技术群 } 


--结束END--

本文标题: Python 3.7:数据类的介绍

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

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

猜你喜欢
  • Python 3.7:数据类的介绍
            Python3.7预计在今年夏天发布,让我们一起偷瞄一眼它带来的新功能吧!如果你经常一个人在家用Pycharm撸代码,请确保将你的Pycharm升级到2018.1版本。(等你读完本文再升级也来得及)。Python3.7版...
    99+
    2023-01-31
    数据 Python
  • python基本数据类型的介绍
    int(整型)在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-922337203685...
    99+
    2023-01-31
    数据类型 python
  • Python中的基本数据类型介绍
    Python 中主要有8种数据类型:number(数字)、string(字符串)、list(列表)、tuple(元组)、dict(字典)、set(集合)、Boolean(布尔值)、N...
    99+
    2024-04-02
  • Python中数据类型的详细介绍
    这篇文章主要讲解了“Python中数据类型的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中数据类型的详细介绍”吧!目录1、字符串2、布尔类型3、整数4、浮点数5、数字6...
    99+
    2023-06-02
  • 数据类型介绍
    目录 什么是数据类型?(掌握) 为何对数据分类?(掌握) 不同数据类型(掌握) 首先让我们回顾变量是什么:变量用来记录世...
    99+
    2023-01-31
    数据类型
  • MySQL的数据类型介绍
    由于Mysql独有的特性和实现细节对性能的影响是很明显的,因为做好Mysql数据库的设计很关键。对于数据库设计,我们不得不提表字段的类型选择,由于Mysql支持的数据类型非常多,因此如何选择正确的数据类型对...
    99+
    2024-04-02
  • python五大标准数据类型的介绍
    这篇文章主要介绍“python五大标准数据类型的介绍”,在日常操作中,相信很多人在python五大标准数据类型的介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python五大标准数据类型的介绍”的疑惑有所...
    99+
    2023-06-02
  • python类介绍
    一.类的定义--class关键字1. 类是用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。使用class语句来创建一个新类,class之后为类的名称(User)并以冒号结尾,类的组成包括...
    99+
    2023-01-31
    python
  • 介绍常见的Python数据类型转换函数
    Python中常用的数据类型转换函数介绍 在Python编程语言中,数据类型转换是一项常见且重要的操作。通过数据类型转换,我们可以将一个数据对象从一种类型转换为另一种类型,使得我们能够更灵活地处理不同类型的数据。本文将介绍Pyt...
    99+
    2024-01-20
    str() float() int()
  • JavaScript中的数据类型介绍
    一、基本数据类型(原始值类型) 基本类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。 基本类...
    99+
    2024-04-02
  • 3、MySQL的数据类型介绍
    上一章节内容主要介绍了一些MySQL中对表和库的增删改查操作,对于上一章中对与表中字段的一些定义进行说明,本章主要介绍关于数据库类型的一些定义。一、概述:MySQL数据库中的数据大致可以分为以下几类,从而实现数据库在操作的时候对不同类型的处...
    99+
    2023-01-31
    数据类型 MySQL
  • 简单介绍Python中的几种数据类型
    大体上把Python中的数据类型分为如下几类: Number(数字) 包括int,long,float,complex String(字符串) 例如:hello,"he...
    99+
    2022-06-04
    几种 数据类型 简单
  • Python中的数据类型的相关操作介绍
    本篇内容主要讲解“Python中的数据类型的相关操作介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的数据类型的相关操作介绍”吧!1-1 Python中的数据类型一、整数Pyth...
    99+
    2023-06-02
  • SQL Server数据类型介绍
    简单整理几个常用的SQL server 数据类型的描述,以便查阅。 ...
    99+
    2024-04-02
  • redis缓存的数据类型介绍
    这期内容当中的小编将会给大家带来有关redis缓存的数据类型介绍,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Redis缓存数据类型有5种,分别是String(字符串)、List(列表...
    99+
    2024-04-02
  • C++抽象数据类型介绍
    公众号:Coder梁(ID:Coder_LT) 我们在学数据结构的时候,经常遇到的一个概念就是抽象数据类型(Abstract Data Type),简称ADT。 维基百科中的定义是:...
    99+
    2024-04-02
  • Oracle数据库常用数据类型介绍
    Oracle数据库是一种常用的关系型数据库管理系统,它支持多种数据类型以满足不同的需求。在使用Oracle数据库时,了解数据库的数据类型是非常重要的。本文将介绍Oracle数据库中常用...
    99+
    2024-03-08
    数据类型 oracle 常用
  • redis数据类型strings的详细介绍
    本篇内容主要讲解“redis数据类型strings的详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“redis数据类型strings的详细介绍”吧!1.&...
    99+
    2024-04-02
  • NoSQL数据库四大分类的介绍
    本篇内容介绍了“NoSQL数据库四大分类的介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!NoSQL数据...
    99+
    2024-04-02
  • C#中数据类型的转换介绍
    目录1、parse转换:将string类型转化为其他类型2、任意类型转化为string类型3、隐式转换:自动转换-->小范围到大范围自动转换4、显示转换:强制转换-->由...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作