雷锋网 - 理解Python数据类(下)

上一篇(左方向键) 下一篇(右方向键) 回目录(回车键) 粗体(B键)  正常(N键) 随机浏览(S键)   浏览次数:36    发布时间:2018/8/13 13:14:29   出处:雷锋网   

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

  翻译 | 程添杰 整理 | MY

理解Python数据类(下) - 后花园网文 - 科技新闻

  这是 Python 最新的 Dataclasses 系列的第二部分内容。在第一部分里,我介绍了 dataclasses 的一般用法。这篇博客主要介绍另一个特征:dataclasses.field。

理解Python数据类(下) - 后花园网文 - 科技新闻

  我们已经知道 Dataclasses 会生成他们自身的__init__方法。它同时把初始化的值赋给这些字段。以下是我们在上一篇博客里定义的内容:

  变量名

  数据类型

  这些内容仅给我们有限的 dataclass 字段使用范围。让我们讨论一下这些局限性,以及它们如何通过 dataclass.field 被解决。

  复合初始化

  考虑以下情形:你想要初始化一个变量为列表。你如何实现它呢?一种简单的方式是使用__post_init__方法。

理解Python数据类(下) - 后花园网文 - 科技新闻

  数据类 Student 产生了一个名为 marks 的列表。我们不传递 marks 的值,而是使用__post_init__方法初始化。这是我们定义的单一属性。此外,我们必须在__post_init__里调用 get_random_marks 函数。这些工作是额外的。

  辛运的是,Python 为我们提供了一个解决方案。我们可以使用 dataclasses.field 来定制化 dataclass 字段的行为以及它们在 dataclass 的影响。

  仍然是上述的使用情形,让我们从__post_init__里去除 get_random_marks 的调用。以下是使用 dataclasses.field 的情形:

理解Python数据类(下) - 后花园网文 - 科技新闻

  dataclasses.field 接受了一个名为 default_factory 的参数,它的作用是:如果在创建对象时没有赋值,则使用该方法初始化该字段。

  default_factory 必须是一个可以调用的无参数方法(通常为一个函数)。

  这样我们就可以使用复合形式初始化字段。现在,让我们考虑另一个使用场景。

  使用全部字段进行数据比较

  通过上篇博文,我们了解到,dataclass 能够自动生成< , =, >, <=和>=这些比较方法。但是这些比较方法的一个缺陷是,它们使用类中的所有字段进行比较,而这种情况往往不常见。更经常地,这种比较方法会给我们使用 dataclasses 造成麻烦。

  考虑以下的使用情形:你有一个数据类用于存放用户的信息。现在,它可能存在以下字段:

  姓名

  年龄

  身高

  体重

  ......

  

雷锋网』的更多其他内容(随机显示)

01、中小学生该如何学习人工智能?索尼给出了自己的答案

2018/8/12 17:55:38

02、京东获首单!互联网消费金融ABN债券通发行

2018/8/12 15:38:03

03、全球第二家 OPPO 超级旗舰店落户深圳,我们看到了这些新零售实践

2018/8/12 12:21:20

04、杭州银泰 in77 的智慧零售云下,藏着 CELLA 怎样的 AI 生态梦?

2018/8/12 10:05:27

05、RideOS 完成 2500 万美元融资,将为全球自动驾驶汽车建“大后台”

2018/8/11 22:24:52

06、车贷P2P平台微贷网在美提交招股书,上半年盈利超3亿元

2018/8/11 21:26:28

07、用友网络上半年营收30亿 财报还隐含哪些关键信息点?

2018/8/11 21:20:21

08、AI芯片销售额已达10亿美元的英特尔如何看待AI芯片市场竞争?

2018/8/11 13:57:22

09、NYU陈溪博士:运筹学与机器学习的融合交叉

2018/8/11 12:53:01

10、从“遥控玩具”到“AI萌宠”,Anki为新款机器人添加了多少AI?

2018/8/10 23:16:11

11、原特斯拉高级工程副总裁 Doug Field 重返苹果,加入绝密造车计划

2018/8/10 21:02:31

12、HoloLens开发者体验报告:Magic Leap One确实比HoloLens好

2018/8/10 21:02:19

13、从“遥控玩具”到“AI宠物”,Anki为新款机器人添加了多少AI?

2018/8/10 17:45:49

14、亚马逊推出Auto SDK,欲将Alexa引入更多车载系统中

2018/8/10 14:35:57

15、三星 Note 9 发布:S Pen 玩出了不少新意,但价格依旧感人

2018/8/10 3:41:50

16、苏州大学张民教授两小时讲座精华摘录:自然语言处理方法与应用

2018/8/9 19:04:20

17、7nm量产芯片的全球首发,竟被矿机厂商嘉楠耘智抢走了

2018/8/9 18:09:35

18、360发现NXP芯片漏洞:国内厂商首次获得芯片巨头致谢

2018/8/9 16:56:32

19、开启后Otto时代:自动驾驶卡车新军Kodiak Robotics融资4000万美元

2018/8/9 16:51:30

20、高通再推全新骁龙670处理器,是“神U”复活还是“低配版”骁龙710?

2018/8/9 13:42:42

21、互金整治办要求将P2P平台逃废债借款人纳入征信

2018/8/9 12:39:58

22、国内首款纯电动城市跑车前途K50正式上市,68.68万的售价会让你纠结吗?

2018/8/9 9:20:07

23、发力车载前装,富瀚微发布首款车规级ISP芯片FH8310

2018/8/9 2:05:01

24、知乎完成 2.7 亿美元 E 轮融资,将大力投入 AI 技术与商业化

2018/8/8 21:42:42

25、三星又下重注:3年内狂撒220亿美元布局AI、5G等领域

2018/8/8 20:42:16

26、预告 大咖Live X Silexica创始人盛伟华:如何驾驭自动驾驶带来的超级并行计算和实时性能的挑战?

2018/8/8 20:40:02

27、售价1399,大朋DPVR全景声巨幕影院8月8日0点全网开抢

2018/8/8 19:33:48

28、“百人团战”之外,看vivo如何玩转ChinaJoy2018?

2018/8/8 18:32:44

29、威马EX5配置发布,推出Lite探索版和Extra创新版

2018/8/8 18:25:50

30、What?要私有化?我还是特斯拉股东吗?

2018/8/8 17:24:19

31、特斯拉私有化?What?我还是股东吗?

2018/8/8 15:35:16

32、想研究 NLP,不了解词嵌入与句嵌入怎么行?

2018/8/8 12:58:10

33、为什么说 2018 年是高通骁龙游戏手机元年?

2018/8/8 1:17:49

34、展示全新的物联网解决方案,斑马技术想为一线员工提升效能优势

2018/8/8 1:12:58

35、Android 9 正式发布:定名为 Pie,充满了人工智能元素

2018/8/7 20:59:34

36、长江存储推出3D NAND架构Xtacking,I/O接口速度高达3Gbps

2018/8/7 20:54:37

37、原百度外卖副总裁宋黎明正式出任智行者CMO

2018/8/7 20:54:24

38、问Alexa问题,回答不上来怎么办?别担心,它找到答案就会告诉你

2018/8/7 19:50:01

39、商汤领投影谱科技D轮13.6亿融资,加大视频领域布局

2018/8/7 19:50:01

40、另辟“相干”蹊径,入场一年的新晋激光雷达厂商如何挤进赛道?

2018/8/7 1:19:32

41、安波福将为中国车企打造智能驾驶座舱,第一个是长城

2018/8/6 16:33:05

42、深思考大脑4.0发布 中文语义理解权威赛事连获冠军大奖

2018/8/6 16:09:32

43、光波导能拯救AR吗?—— 对话灵犀微光CEO郑昱

2018/8/6 15:34:01

44、路由器+区块链:天使还是魔鬼?——AI研习社闭门沙龙第一期活动顺利举办

2018/8/6 15:32:58

45、美国财政部发布222页Fintech报告,释放积极信号

2018/8/5 22:27:33

46、首张高精地图即将发布,赋予自动驾驶车辆“眼睛”

2018/8/5 21:22:54

47、微软、ICE预计11月启动数字资产项目,有什么名堂?

2018/8/5 20:20:40

48、谁是最聪明的城市?纽约、伦敦和巴黎位列“全球智慧城市”前三甲

2018/8/5 19:20:23

49、苹果供应商台积电三地生产线遭勒索病毒攻击

2018/8/5 16:03:36

50、高精地图戏台上的众生相

2018/8/5 1:10:00