
在我们覆盖 7 个 PyPI 库的使用系列文章中了解更多解决 Python 问题的信息。
Python是别P板当今使用最多流行的编程语言之一,因为:它是使用开源的,它具有广泛的别P板用途(例如 Web 编程、业务应用、使用游戏、别P板科学编程等等),使用它有一个充满活力和专注的别P板社区支持它。这个社区是使用我们在 Python Package Index(PyPI)中提供如此庞大、多样化的别P板软件包的原因,用以扩展和改进 Python。源码下载使用并解决不可避免的别P板问题。
在本系列中,使用我们将介绍七个可以帮助你解决常见 Python 问题的别P板 PyPI 库。今天,使用我们将研究 attrs,这是一个帮助你快速编写简洁、正确的代码的 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})"接下来你会写一个好看的 docstring 来记录期望的类型。但是亿华云计算你注意到你忘了添加 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: intattrs 库也对不可变式编程支持良好。将***行改成 @attr.s(auto_attribs=True, frozen=True) 意味着 Book 现在是不可变的:尝试修改一个属性将会引发一个异常。相反,比如,如果希望将发布日期向后一年,我们可以修改成 attr.evolve(old_book, published_year=old_book.published_year+1) 来得到一个新的实例。
本系列的下一篇文章我们将来看下 singledispatch,一个能让你向 Python 库添加方法的库。
相关文章:
服务器租用IT技术网益华科技香港云服务器源码下载企商汇亿华云IT资讯网源码库益强IT技术网益强智未来运维纵横技术快报云智核编程之道益强科技IT资讯网益强资讯优选科技前瞻益强前沿资讯益华IT技术论坛码力社益华科技亿华科技亿华互联益华科技益强编程堂益强编程舍亿华智慧云极客编程亿华云计算亿华灵动云站无忧智能时代全栈开发汇智坊思维库极客码头创站工坊益强科技益强数据堂
0.1053s , 11647.1484375 kb
Copyright © 2025 Powered by 使用attrs来告别Python中的样板,亿华互联 滇ICP备2023000592号-16