0
点赞
收藏
分享

微信扫一扫

pydantic学习与使用-6.dataclasses 验证器

一世独秀 2022-03-15 阅读 42


前言

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数据验证库

0 条评论