Python■你应该知道的Python3.6、3.7、3.8新特性( 四 )
if not isinstance(other self.__class__): return NotImplemented
return (self._id self.author_id) < (other._id other.author_id) def __repr__(self):
return '{(id={ author_id={ title={)'.format(
self.__class__.__name__ self._id self.author_id self.title)
大量的初始化属性要定义默认值 , 可能还需要重写一堆魔法方法 , 来实现类实例的打印、比较、排序和去重等功能 。
如果使用dataclasses
进行改造 , 可以写成这个样子:
from dataclasses import dataclass fieldfrom typing import Listfrom datetime import datetimeimport dateutil@dataclass(order=True) //注意这里class Article(object):
_id: int
author_id: int
title: str = field(compare=False)
text: str = field(repr=False compare=False)
tags: List[str
= field(default=list() repr=False compare=False)
created: datetime = field(default=datetime.now() repr=False compare=False)
edited: datetime = field(default=datetime.now() repr=False compare=False) def __post_init__(self):
if type(self.created) is str:
self.created = dateutil.parser.parse(self.created) if type(self.edited) is str:
self.edited = dateutil.parser.parse(self.edited)
这使得类不仅容易设置 , 而且当我们创建一个实例并打印出来时 , 它还可以自动生成优美的字符串 。 在与其他类实例进行比较时 , 它也会有适当的行为 。 这是因为dataclasses
除了帮我们自动生成 __init__
方法外 , 还生成了一些其他特殊方法 , 如 repr、eq 和 hash 等 。
Dataclasses 使用字段 field来完提供默认值 , 手动构造一个 field() 函数能够访问其他选项 , 从而更改默认值 。 例如 , 这里将 field 中的 default_factory 设置为一个 lambda 函数 , 该函数提示用户输入其名称 。
from dataclasses import dataclass fieldclass User:
name: str = field(default_factory=lambda: input(\"enter name\"))
4、生成器异常处理在Python 3.7中 , 生成器引发StopIteration异常后 , StopIteration异常将被转换成RuntimeError异常 , 那样它不会悄悄一路影响应用程序的堆栈框架 。 这意味着如何处理生成器的行为方面不太敏锐的一些程序会在Python 3.7中抛出RuntimeError 。 在Python 3.6中 , 这种行为生成一个弃用警告;在Python 3.7中 , 它将生成一个完整的错误 。
一个简易的方法是使用try/except代码段 , 在StopIteration传播到生成器的外面捕获它 。 更好的解决方案是重新考虑如何构建生成器――比如说 , 使用return语句来终止生成器 , 而不是手动引发StopIteration 。
5、开发模式Python解释器添加了一个新的命令行开关:-X
, 让开发人员可以为解释器设置许多低级选项 。
这种运行时的检查机制通常对性能有重大影响 , 但在调试过程中对开发人员很有用 。
-X
激活的选项包括:
- [霸王龙]地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 产业气象站|散热效果大大下降,CPU硅脂应该这样涂!涂多了得不偿失
- 「霸王龙」地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 大卫聊科技|中国首富原来是京东幕后大老板?低调过头了!,有多少人不知道
- 大头哥哥说娱乐|而自己却还不知道?教你几招快速分辨真假好友,微信已被好友删除
- Python之王|Pandas数据合并与拼接的5种方法
- 北峰电讯|你知道几个?,警用对讲机全是PDT?警察常用的模拟对讲机频段
- 王石头科技|30系列还值得买吗,应该选择哪款?,华为Mate 40要来了,Mate
- 霸王龙:地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 影弟提名1|总是打电话催你“换套餐”?可能很多人都不知道,为什么移动客服