提供与许多数据类类似库兼容性的实用工具
项目描述
fieldz
用于与多个数据类类似库工作的统一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.Field
和 fieldz.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
)
支持的库
-
dataclasses
-
collections.namedtuple
-
pydantic
(v1 和 v2) -
attrs
-
msgspec
-
dataclassy
-
sqlmodel
(它只是 pydantic)
... 说不定哪天?
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分发
fieldz-0.1.0.tar.gz (17.0 kB 查看哈希值)
构建分发
fieldz-0.1.0-py3-none-any.whl (17.6 kB 查看哈希值)
关闭
fieldz-0.1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ee3352534bc5d04ee8e1cafa5f59add2c11bea0fc2ecefe18454ccfdc7e21fb2 |
|
MD5 | 0e4e1528b9a8a9a52e3bf91b6ddbbcf5 |
|
BLAKE2b-256 | 24556b5cc16fcd242610bed76486980594e9f0ab2350dac041fcc6cb63daa38f |
关闭
fieldz-0.1.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0825a45396877769b107ce016e63f6fedbe625a0ace3e56fe2f9d6d61c7ea8df |
|
MD5 | d0387f5c8c37ab115f4fc9ed9218d76f |
|
BLAKE2b-256 | 862d90a713b473206f5505e01fbf86d881b3856cb3461503d9b073bf55b19ce6 |