大家好,我是木木。今天给大家分享一个超强的Python库,Attr
。
Attr 库是专门用于处理 Python 类的属性的。通过使用装饰器和类型注解,它可以帮助你写出更简洁、更易于维护的代码。

主要特点
-
简化声明 -
Attr 通过装饰器自动从类型注释生成类属性和构造器,极大简化了类的声明过程。 -
数据验证 -
支持内置和自定义验证器,确保数据的有效性和一致性。 -
不变性选项 -
可以设置属性为不可变,增强代码的安全性和稳定性。
安装与初步应用
项目地址:https://github.com/denis-ryzhkov/attr
要开始使用attr
,首先需要通过pip安装:
pip install attr
定义基本类
下面是一个使用attr
定义的简单类的例子。这个类描述了一个书籍,包含书名和作者两个字段:
>>> import attr
>>> @attr.s
>>> class Book:
>>> title = attr.ib(type=str)
>>> author = attr.ib(type=str)
>>> book = Book(title="Python进阶", author="木木")
>>> print(book)
Book(title='Python进阶', author='木木')
定义带验证的类
attr
还可以非常方便地为属性添加验证器,确保数据的正确性。例如,我们为书籍类添加一个年份属性,并确保其为有效的出版年份:
@attr.s
class Book:
title = attr.ib(type=str)
author = attr.ib(type=str)
year = attr.ib(type=int)
@year.validator
def check(self, attribute, value):
if value < 0 or value > 2023:
raise ValueError("year must be valid")
book = Book(title="Python进阶", author="木木", year=2021)
print(book)
高级功能应用
对于有经验的开发者,attr
提供了强大的功能,可以用于实现复杂的数据结构和自定义行为。
import attr
from typing import List
@attr.s
class Book:
title = attr.ib(type=str)
author = attr.ib(type=str)
year = attr.ib(type=int)
genre = attr.ib(type=str)
@year.validator
def check_year(self, attribute, value):
if value < 1800 or value > 2023:
raise ValueError(f"The year {value} is not valid for publication.")
@attr.s
class Bookstore:
books = attr.ib(factory=list, type=List[Book])
def add_book(self, book: Book):
self.books.append(book)
print(f"Added book: {book}")
def remove_book(self, title: str):
book_to_remove = next((book for book in self.books if book.title == title), None)
if book_to_remove:
self.books.remove(book_to_remove)
print(f"Removed book: {book_to_remove}")
else:
print("Book not found.")
def find_books_by_author(self, author: str):
return [book for book in self.books if book.author == author]
# 创建书店实例并演示功能
bookstore = Bookstore()
bookstore.add_book(Book(title="Python进阶", author="木木", year=2021, genre="教育"))
bookstore.add_book(Book(title="深入Python", author="李雷", year=2018, genre="科技"))
# 移除一本书
bookstore.remove_book("Python进阶")
# 搜索作者为"李雷"的书籍
books_by_lilei = bookstore.find_books_by_author("李雷")
for book in books_by_lilei:
print(book)

这里,我们将利用attr
来创建一个较为复杂的类,该类表示一个书店,包含多个书籍对象,并支持书籍的添加、删除和搜索功能。
小结
通过 Attr,我们可以非常简单地创建有丰富功能和数据完整性的类。它的简洁性和强大的功能,让代码更加干净和易于管理。对于希望提高代码质量和开发效率的 Python 开发者来说,这无疑是一个不可多得的工具。
—— End ——
原文始发于微信公众号(木木夕咦):Attrs,一个实用的python库
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/289871.html