使用 utype 的 类型声明机制 在 types.py 中添加更多编程中常用的类型,比如
from utype.types import Int
class Month(Int):
ge = 1
le = 12
使用 utype 的 类型声明机制 在 types.py 中添加更多编程中常用的类型,比如
from utype.types import Int
class Month(Int):
ge = 1
le = 12
utype 有没有 logo 图片发我一下?
想问一下,这个工具和pydantic有什么差别?如果utype只是为了避免在函数中进行类型检查的话?
我整理了一下,后面也会更新到官方文档里:
Pydantic 是一个流行的 Python 数据解析验证库,utype 提供的功能与 Pydantic 大体上是相近的,但相比之下,utype 在以下方面有更多的关注
>>> from pydantic import PositiveInt
>>> PositiveInt(-1)
-1
>>> from utype.types import PositiveInt
>>> PositiveInt(-1)
utype.utils.exceptions.ConstraintError: Constraint: <gt>: 0 violated
from utype import register_transformer
from collections.abc import Mapping
from pydantic import BaseModel
@register_transformer(BaseModel)
def transform_pydantic(transformer, data, cls):
if not transformer.no_explicit_cast and not isinstance(data, Mapping):
data = transformer(data, dict)
return cls(**data)
from utype import Rule, exc
from typing import Literal
class IntWeekDay(int, Rule):
gt = 0
le = 7
weekday = IntWeekDay ^ Literal['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']
>>> weekday('6')
6
>>> weekday(b'tue')
'tue'
>>> weekday(8)
Constraint: <le>: 7 violated;
Constraint: <enum>: ('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun') violated
mode
) 机制,包括 no_input
与 no_output
等,可以在一个数据类中定义字段的多种用法,对于在 web 场景中定义负责 增改查 等多种目的的数据模型更加方便json.dumps
处理,utype 提供继承原生字典的 Schema
类,整合到数据工作流中更方便from pydantic import BaseModel
from utype import Schema
import json
class md(BaseModel):
value: int
class schema(Schema):
value: int
>>> json.dumps(md(value=1))
TypeError: Object of type md is not JSON serializable
>>> json.dumps(schema(value=1))
'{"value": 1}'
整体上而言,utype 提供的配置参数更加简洁一些,提供的功更加灵活一些,可以看作一个更加灵活与轻量级的 Pydantic