本文共 2600 字,大约阅读时间需要 8 分钟。
python中attrs
Python是当今使用的最之一,并且有充分的理由:它是开源的,具有广泛的用途(例如Web编程,业务应用程序,游戏,科学编程等等),并且有一个充满活力和敬业精神的社区来支持它。 这个社区的原因是我们在 (PyPI)中拥有如此众多,种类繁多的软件包,以扩展和改进Python并解决不可避免的小问题。
在本系列中,我们将研究七个PyPI库,它们可以帮助您解决常见的Python问题。 今天,我们将研究 ,这是一个Python软件包,可帮助您快速编写简洁,正确的代码。
如果您使用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})"
接下来,编写一个漂亮的文档字符串,记录预期的类型。 但是您注意到您忘了添加edition和published_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库添加方法。
翻译自:
python中attrs
转载地址:http://dtbzd.baihongyu.com/