全球AIoT产业·智能制造峰会
您正在使用IE低版浏览器,为了您的雷锋网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
此为临时链接,仅用于文章预览,将在时失效
人工智能 正文
发私信给雷锋字幕组
发送

0

理解Python数据类(上)

本文作者:雷锋字幕组 2018-08-13 10:28
导语:当阅读这篇博客的时候,你就已经了解到了 Python 3.7 及随之而来的新特性。就个人而言,我对 Dataclasses 最感兴趣,我已经期待它的发布很久了。

雷锋网按:本文为AI研习社编译的技术博客,原标题 Understanding Python Dataclasses — Part 1 ,作者为  SHIVAM BANSAL 。

翻译 | 程添杰    整理 | 余杭


理解Python数据类(上)

这是一个包含两部分的博文:

  1. 这一篇是 Dataclass 的特征概述 

  2. 下一篇是 Dataclass fields 的概述 


引言

Dataclasses 是一些适合于存储数据对象(data object)的 Python 类。你可能会问,什么是数据对象?下面是一个并不详尽的用于定义数据对象的特征列表:

他们存储并表示特定的数据类型。例如:一个数字。对于那些熟悉对象关系映射(Object Relational Mapping,简称 ORM)的人来说,一个模型实例就是一个数据对象。它表示了一种特定类型的实体。它存储了用于定义或表示那种实体的属性。

他们能够被用于和同类型的其他对象进行比较。例如,一个数字可能大于,小于或等于另一个数字。

当然数据对象还有更多的特征,但上述内容足以帮助你理解关键部分。

为了理解 Dataclases,我们将实现一个简单的类。它能够存储一个数字,并允许我们执行上面提到的各种运算。

首先,我们将使用普通的类,然后我们使用 Dataclasses 来实现相同的结果。

但是在我们开始之前,还是要提一下 Dataclasses 的用法。

Python3.7 提供了一个装饰器 dataclass,用以把一个类转化为 dataclass。  

你需要做的就是把类包裹进装饰器里:

理解Python数据类(上)

现在,让我们进一步了解 dataclass 的用法,以及它能为我们改变什么。

初始化

理解Python数据类(上)

使用 dataclass

理解Python数据类(上)

以下是使用了 dataclass 装饰器之后的变化:

1. 不必定义__init__然后再赋值给 self, 装饰器会注意这一点

2.我们用一种更可读的方式定义成员属性,并带有类型提示(type hinting)。我们现在立刻就知道 val 的类型是 int。这种方式当然比通常的定义方法可读性更好。

Python 之道:可读性很重要 

也可以定义默认值:

理解Python数据类(上)

对象表示是一种对象的字符串表示法,在调试时非常有用。

默认的 Python 对象表示不是非常的有用:理解Python数据类(上)

这种表示法不能给我们对象用途的提示,同时将导致可怕的调试经历。

一种有意义的表示法可以通过在类定义里,添加一种__repr__方法实现。理解Python数据类(上)

现在我们就有了一种有意义的对象表示法:

理解Python数据类(上)

dataclass 会自动添加一个__repr__函数,因此我们不必手动实现它了。理解Python数据类(上)

数据比较

通常,数据对象会伴随着相互比较的需要。两个对象'a'和'b'之间通常包含以下的运算:

a < b

a > b

a == b

a >= b

a <= b

在 Python 里,可以通过在类中定义一些方法来实现上述运算。为了保证整篇文章的简洁性,我将只实现 == 和 < 。



......

想要继续阅读,请移步至我们的AI研习社社区:https://club.leiphone.com/page/TextTranslation/745

更多精彩内容尽在 AI 研习社。

不同领域包括计算机视觉,语音语义,区块链,自动驾驶,数据挖掘,智能控制,编程语言等每日更新。

手机端可以扫描二维码访问

雷锋网(公众号:雷锋网)雷锋网

理解Python数据类(上)


雷锋网原创文章,未经授权禁止转载。详情见转载须知

理解Python数据类(上)

分享:
相关文章

文章点评:

表情

知情人士

入组微信leiphonefansub
当月热门文章
最新文章
请填写申请人资料
姓名
电话
邮箱
微信号
作品链接
个人简介
为了您的账户安全,请验证邮箱
您的邮箱还未验证,完成可获20积分哟!
请验证您的邮箱
立即验证
完善账号信息
您的账号已经绑定,现在您可以设置密码以方便用邮箱登录
立即设置 以后再说