跳转到主要内容

提供与许多数据类类似库兼容性的实用工具

项目描述

fieldz

License PyPI Python Version CI codecov

用于与多个数据类类似库工作的统一API

数据类模式

有许多库实现了类似的数据类类似模式!

dataclasses.dataclass

import dataclasses

@dataclasses.dataclass
class SomeDataclass:
    a: int = 0
    b: str = "b"
    c: list[int] = dataclasses.field(default_factory=list)

pydantic.BaseModel

import pydantic

class SomePydanticModel(pydantic.BaseModel):
    a: int = 0
    b: str = "b"
    c: list[int] = pydantic.Field(default_factory=list)

attrs.define

import attr

@attr.define
class SomeAttrsModel:
    a: int = 0
    b: str = "b"
    c: list[int] = attr.field(default=attr.Factory(list))

msgspec.Struct

import msgspec

class SomeMsgspecStruct(msgspec.Struct):
    a: int = 0
    b: str = "b"
    c: list[int] = msgspec.field(default_factory=list)

等等...

统一API

这些都是非常棒的库,每个库都有其自身的优点和缺点。有时,你只是想查询数据类类似对象的基本信息,例如获取字段名称或类型,或将它转换为字典。

fieldz 提供了这些操作的统一API(在可能的情况下遵循或扩展来自 dataclasses 的API)。

def fields(obj: Any) -> tuple[Field, ...]:
    """Return a tuple of fieldz.Field objects for the object."""

def replace(obj: Any, /, **changes: Any) -> Any:
    """Return a copy of obj with the specified changes."""

def asdict(obj: Any) -> dict[str, Any]:
    """Return a dict representation of obj."""

def astuple(obj: Any) -> tuple[Any, ...]:
    """Return a tuple representation of obj."""

def params(obj: Any) -> DataclassParams:
    """Return parameters used to define the dataclass."""

fieldz.Fieldfieldz.DataclassParam 对象是简单的数据类,分别匹配 dataclasses.Field 和(私有)dataclasses._DataclassParams 对象的协议。字段对象还添加了一个 native_field 属性,它是从底层库中原始字段对象。

示例

from fieldz import Field, fields

standardized_fields = (
    Field(name="a", type=int, default=0),
    Field(name="b", type=str, default="b"),
    Field(name="c", type=list[int], default_factory=list),
)

assert (
    fields(SomeDataclass)
    == fields(SomePydanticModel)
    == fields(SomeAttrsModel)
    == fields(SomeMsgspecStruct)
    == standardized_fields
)

支持的库

... 说不定哪天?

项目详情


下载文件

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

源分发

fieldz-0.1.0.tar.gz (17.0 kB 查看哈希值)

上传时间

构建分发

fieldz-0.1.0-py3-none-any.whl (17.6 kB 查看哈希值)

上传时间 Python 3

由以下机构支持