大家好,今天外出会见朋友出了很多的差错,让人哭笑不得。
今天是 1 号,联通的扣费日,早上出门前忘记充话费了,于是,微博刷着刷着就停机了。
很惊慌的找到星巴克蹭了下网,冲了 200 块话费,然后匆忙的告诉朋友我手机欠费,不过快到了。
但仍然忘记告诉他在哪里等我,就匆匆的离开星巴克,直蹦他住的小区。
显然,我低估了自己的记忆力,到了小区,却忘记他住哪栋楼哪层哪个房间。
然后就开始焦急的频繁开关飞行模式看看充值是否已经完成了
显然,我更低估了支付宝今天的充值速度,一个小时过去了还没到账
第一时间想到的是看看附近有没有大型的餐饮店可以蹭网,又不敢走太远,于是三步一回头的看着朋友有没有出来,一边询问商家有没有 wifi。
没有,没有,折腾半个小时后,我快彻底放弃了,于是在更大的范围寻找,找了很久,才找到一家零售店,蹭了人家的 wifi
然后告诉我朋友: 我到你家楼下了
发完立刻回去小区门口等着,等等,实际上,我根本就是在小区外啊,我这脑子,哎,苦等十几分钟,没人影
又屁颠屁颠跑回去继续蹭,然后发了一条, 我错了,我在小区门口等 就马不停蹄的跑回小区门口去,
大家猜发生了什么事? 对的,忘记告诉是哪个门口了,于是乎,肯定,等了十几分钟没结果
我快彻底崩溃了,赶紧又跑回去店铺蹭网。这下,我心机的先拍了两张小区门口的照片给他,告诉他我在这里等,不过因为去别的地方蹭网了,所以你要在这里等我....
折腾两个半小时,终于见面了。
整个过程,我最期待的是附近有一个可以充值的地方,显然,现在,这样地方哪里有,其次期待的是支付宝商家快点把钱充了,第三期待的是朋友啊,你感觉打个电话给我吧,好歹我只是单停
联通话费方面,差不多 12 点才到,但是,我仍然低估了自己欠费的金额,整整充值了 400 大洋才在下午回到家的时候彻底重新能够上网
Python 3.7 新特性:数据类
回到正题,今天一回来,发现 Python 3.7 版本正式发布了,带来了大量的更新,最瞩目的莫过于数据类
数据类,顾名思义,就是类属性有确定类型的特殊类
怎么理解呢,比如之前我们定义平面上的一个坐标点 Point
的代码是这样的
class Point: x y
但是,类属性 x
和 y
并没有明确的类型,所以我们实例化一个对象的时候可以传递任意值
new Point('这是 x 值', '这是 y 值' )
这显然不是我们想要的,我们想要的是 x
和 y
只能是浮点数或整数值
为了解决这个问题,数据类就孕育而生了。
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 中数据类有两个特性
-
使用 类 变量声明 来定义一个属性
变量声明 在 3.6 中就已经实现了,比如要定一个
int
类型的变量age
,可以使用下面的语法age:int
-
自动生成构造函数
__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 基础教程 过时了,哎
找个时间翻新一遍