Attrs,一个实用的python库

Attrs,一个实用的python库

大家好,我是木木。今天给大家分享一个超强的Python库,Attr

Attr 库是专门用于处理 Python 类的属性的。通过使用装饰器和类型注解,它可以帮助你写出更简洁、更易于维护的代码。

Attrs,一个实用的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)
Attrs,一个实用的python库
图源网络

这里,我们将利用attr来创建一个较为复杂的类,该类表示一个书店,包含多个书籍对象,并支持书籍的添加、删除和搜索功能。

小结

通过 Attr,我们可以非常简单地创建有丰富功能和数据完整性的类。它的简洁性和强大的功能,让代码更加干净和易于管理。对于希望提高代码质量和开发效率的 Python 开发者来说,这无疑是一个不可多得的工具。



—— End ——




原文始发于微信公众号(木木夕咦):Attrs,一个实用的python库

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/289871.html

(0)
葫芦侠五楼的头像葫芦侠五楼

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!