跳转到主要内容

创建attrs字段的替代API

项目描述

Elysia

PyPI - Python Version PyPI GitHub release (latest SemVer) PyPI - License Code style: Black

Elysia是attrs的插件,它提供了一个用于在@define类上创建字段的替代API。

安装

pip install elysia

用法

Elysia的唯一导出是Fields类,它封装了attrs.fieldattrs.settersattrs.validators,为定义实例属性提供了一个更简洁的API。

以下是一个使用attrs和Elysia创建的类的简要示例

from datetime import datetime

from attrs import define
from elysia import Fields


@define
class User:
    name: str = Fields.field()
    password: str = Fields.field(
        on_setattr=Fields.setters.validate,
        validator=Fields.validators.min_len(8)
    )

    created_at: datetime = Fields.attr(factory=datetime.utcnow, frozen=True)

User类有两个__init__参数:namepassword。每次设置时,都会验证password以确保它至少有8个字符长。

User还有一个名为created_at的属性,它不能通过__init__参数设置。当创建User对象时,created_at设置为当前时间,之后不能更改。

那么,这一切是如何工作的呢?

很高兴您问了。

使用Elysia定义属性有两种方式:Fields.field()Fields.attr()Fields.field()定义映射到__init__参数的属性;Fields.attr()定义不映射到__init__参数的属性。两者都是对attrs.field的封装,并接受所有相同的参数。像attrs.field一样,Fields.field()Fields.attr()的所有参数都是关键字参数。

这两种方法也接受一个可选的布尔参数frozen。将其设置为Trueon_setattr=attrs.setters.frozen的快捷方式——也就是说,它将属性冻结,如果您在初始化后尝试设置它,则会抛出异常。

警告

艾莉西亚很高兴将 frozen=True 与您传递给 on_setattr 的任何其他内容结合使用,但 attrs.setters.frozen 将首先应用,这可能与您的预期不符。

字段还通过 Fields.settersFields.validators 分别提供对 attrs 的设置器和验证器的访问。无论通过 Fields 还是 attrs 访问设置器和验证器都没有区别。做您喜欢的事情。

许可证

艾莉西亚遵循 MIT 许可证

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

elysia-1.1.1.tar.gz (3.4 kB 查看哈希值)

上传时间

构建分发

elysia-1.1.1-py3-none-any.whl (4.0 kB 查看哈希值)

上传时间 Python 3

由以下支持