博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 attrs 来告别 Python 中的样板
阅读量:6315 次
发布时间:2019-06-22

本文共 1514 字,大约阅读时间需要 5 分钟。

在我们覆盖 7 个 PyPI 库的系列文章中了解更多解决 Python 问题的信息。

Python是当今使用最多之一,因为:它是开源的,它具有广泛的用途(例如 Web 编程、业务应用、游戏、科学编程等等),它有一个充满活力和专注的社区支持它。这个社区是我们在 (PyPI)中提供如此庞大、多样化的软件包的原因,用以扩展和改进 Python。并解决不可避免的问题。

在本系列中,我们将介绍七个可以帮助你解决常见 Python 问题的 PyPI 库。今天,我们将研究 ,这是一个帮助你快速编写简洁、正确的代码的 Python 包。

attrs

如果你已经写过一段时间的 Python,那么你可能习惯这样写代码:

class Book(object):    def __init__(self, isbn, name, author):        self.isbn = isbn        self.name = name        self.author = author复制代码

接着写一个 __repr__ 函数。否则,很难记录 Book 的实例:

def __repr__(self):    return f"Book({self.isbn}, {self.name}, {self.author})"复制代码

接下来你会写一个好看的 docstring 来记录期望的类型。但是你注意到你忘了添加 editionpublished_year 属性,所以你必须在五个地方修改它们。

如果你不必这么做如何?

@attr.s(auto_attribs=True)class Book(object):    isbn: str    name: str    author: str    published_year: int    edition: int复制代码

使用新的类型注释语法注释类型属性,attrs 会检测注释并创建一个类。

ISBN 有特定格式。如果我们想强行使用该格式怎么办?

@attr.s(auto_attribs=True)class Book(object):    isbn: str = attr.ib()    @isbn.validator    def pattern_match(self, attribute, value):        m = re.match(r"^(\d{3}-)\d{1,3}-\d{2,3}-\d{1,7}-\d$", value)        if not m:            raise ValueError("incorrect format for isbn", value)    name: str     author: str    published_year: int    edition: int复制代码

attrs 库也对支持良好。将第一行改成 @attr.s(auto_attribs=True, frozen=True) 意味着 Book 现在是不可变的:尝试修改一个属性将会引发一个异常。相反,比如,如果希望将发布日期向后一年,我们可以修改成 attr.evolve(old_book, published_year=old_book.published_year+1) 来得到一个新的实例。

本系列的下一篇文章我们将来看下 singledispatch,一个能让你向 Python 库添加方法的库。

查看本系列先前的文章


via:

作者: 选题: 译者: 校对:

本文由 原创编译, 荣誉推出

转载地址:http://ldrxa.baihongyu.com/

你可能感兴趣的文章
java web开发_购物车数据封装及数据展示
查看>>
提高记忆力 学习笔记
查看>>
大话编程(四)
查看>>
数据库设计系列[01]一些重要的概念
查看>>
存储过程或函数中不要使用库名
查看>>
深入理解指针函数
查看>>
海量数据插入性能测试
查看>>
Upgrade 11.2.0.1 DB/RDBMS to 11.2.0.2 in Linux
查看>>
ubuntu12.04 安装JDK7
查看>>
shell编程——判断条件
查看>>
文件压缩/解压算法 - cutepig - 博客园
查看>>
Zlib与GZip - woaidongmao - C++博客
查看>>
[Java] 重新熟悉java的一些记录 从evernote上贴出来的
查看>>
冒泡排序
查看>>
New Text Document.udl
查看>>
商店管理系统源代码(三)
查看>>
hdu 1116(并查集+欧拉路判断)
查看>>
ABAP RAWSTRING(XSTRING) 类型
查看>>
python 自动化测试资料
查看>>
机器学习&数据挖掘笔记_12(对Conjugate Gradient 优化的简单理解)
查看>>