Python 3.7 新特性:数据类

yufei       5 年, 10 月 前       596

大家好,今天外出会见朋友出了很多的差错,让人哭笑不得。

今天是 1 号,联通的扣费日,早上出门前忘记充话费了,于是,微博刷着刷着就停机了。

很惊慌的找到星巴克蹭了下网,冲了 200 块话费,然后匆忙的告诉朋友我手机欠费,不过快到了。

但仍然忘记告诉他在哪里等我,就匆匆的离开星巴克,直蹦他住的小区。

显然,我低估了自己的记忆力,到了小区,却忘记他住哪栋楼哪层哪个房间。

然后就开始焦急的频繁开关飞行模式看看充值是否已经完成了

显然,我更低估了支付宝今天的充值速度,一个小时过去了还没到账

第一时间想到的是看看附近有没有大型的餐饮店可以蹭网,又不敢走太远,于是三步一回头的看着朋友有没有出来,一边询问商家有没有 wifi。

没有,没有,折腾半个小时后,我快彻底放弃了,于是在更大的范围寻找,找了很久,才找到一家零售店,蹭了人家的 wifi

然后告诉我朋友: 我到你家楼下了

发完立刻回去小区门口等着,等等,实际上,我根本就是在小区外啊,我这脑子,哎,苦等十几分钟,没人影

又屁颠屁颠跑回去继续蹭,然后发了一条, 我错了,我在小区门口等 就马不停蹄的跑回小区门口去,

大家猜发生了什么事? 对的,忘记告诉是哪个门口了,于是乎,肯定,等了十几分钟没结果

我快彻底崩溃了,赶紧又跑回去店铺蹭网。这下,我心机的先拍了两张小区门口的照片给他,告诉他我在这里等,不过因为去别的地方蹭网了,所以你要在这里等我....

折腾两个半小时,终于见面了。

整个过程,我最期待的是附近有一个可以充值的地方,显然,现在,这样地方哪里有,其次期待的是支付宝商家快点把钱充了,第三期待的是朋友啊,你感觉打个电话给我吧,好歹我只是单停

联通话费方面,差不多 12 点才到,但是,我仍然低估了自己欠费的金额,整整充值了 400 大洋才在下午回到家的时候彻底重新能够上网

Python 3.7 新特性:数据类

回到正题,今天一回来,发现 Python 3.7 版本正式发布了,带来了大量的更新,最瞩目的莫过于数据类

数据类,顾名思义,就是类属性有确定类型的特殊类

怎么理解呢,比如之前我们定义平面上的一个坐标点 Point 的代码是这样的

class Point:
    x
    y

但是,类属性 xy 并没有明确的类型,所以我们实例化一个对象的时候可以传递任意值

new Point('这是 x 值', '这是 y 值' )

这显然不是我们想要的,我们想要的是 xy 只能是浮点数或整数值

为了解决这个问题,数据类就孕育而生了。

Python 3.7 中和数据类相关的所有方法和装饰器都在 dataclasses 模块中定义,所以使用前要先引入模块

import dataclasses

Python 3.7 并不是像 Kotlin 那样提供了 data class 来声明数据类,反而是提供了一个名为 dataclass() 的装饰器函数来将一个普通的类装饰成数据类

import 
@dataclasses.dataclass
class Point:
    x: float
    y: float
    z: float = 0.0

p = Point(1.5, 2.5)
print(p)

# 输出 "Point(x=1.5, y=2.5, z=0.0)"

Python 3.7 中数据类有两个特性

  1. 使用 变量声明 来定义一个属性

    变量声明 在 3.6 中就已经实现了,比如要定一个 int 类型的变量 age,可以使用下面的语法

    age:int
    
  2. 自动生成构造函数 __init__() 和其它魔法函数,比如 __repr__(), __eq__()__hash__()

    当然了,我们也可以给 dataclass() 装饰器传递参数来定制需要生成哪些魔法函数

    @dataclasses.dataclass
    class C:
        ...
    
    @dataclasses.dataclass()
    class C:
        ...
    
    @dataclasses.dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
    class C:
       ...
    

    上面这三种结果是一样的

    而参数,比如 init=True 用于设置是否生成 __init__() 函数

dataclasses 模块还提供了其它的方法用来辅助使用数据类,我们就不一一介绍了,感兴趣的朋友,可以查看官方的详细介绍

一个数据类就让我感觉我之前翻译的 Python 3 基础教程 过时了,哎

找个时间翻新一遍

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.