pydantic学习与使用-6.dataclasses 验证器
Posted 上海-悠悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pydantic学习与使用-6.dataclasses 验证器相关的知识,希望对你有一定的参考价值。
前言
validator 验证器也可以应用于 pydantic dataclasses.
pydantic dataclasses
pydantic 里面的 dataclassesdata 是 dataclasses.dataclass 和 validation 的结合。
from datetime import datetime
from pydantic import validator
from pydantic.dataclasses import dataclass
@dataclass
class DemoDataclass:
ts: datetime = None
@validator('ts', pre=True, always=True)
def set_ts_now(cls, v):
return v or datetime.now()
print(DemoDataclass())
# > DemoDataclass(ts=datetime.datetime(2021, 12, 31, 15, 4, 57, 631059))
print(DemoDataclass(ts='2017-11-08T14:00'))
# > DemoDataclass(ts=datetime.datetime(2017, 11, 8, 14, 0))
使用示例
validator 验证同样适用pre 和 each_item 验证器
from pydantic import validator
from pydantic.dataclasses import dataclass
from typing import List
@dataclass
class User(object):
name: str
age: int
friends: List[int]
@validator('name')
def name_must_contain_space(cls, v):
if ' ' not in v:
raise ValueError('must contain a space')
return v
@validator('age')
def check_age(cls, v):
if v < 18:
raise ValueError('age less then 18')
return v
@validator('friends', each_item=True)
def check_friends(cls, v):
assert v >= 2, f'v is not greater then 2'
return v
user = User(name='yo yo',
age=20,
friends=[2, 3, 4])
print(user) # User(name='yo yo', age=20, friends=[2, 3, 4])
print(user.name) # yo yo
print(user.age) # 20
print(user.friends) # [2, 3, 4]
以上是关于pydantic学习与使用-6.dataclasses 验证器的主要内容,如果未能解决你的问题,请参考以下文章
pydantic学习与使用-2.基本模型(BaseModel)使用
pydantic学习与使用-6.dataclasses 验证器
pydantic学习与使用-13.Field 定制字段使用别名alias