前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pydantic学习与使用-6.dataclasses 验证器

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

作者头像
上海-悠悠
发布2022-03-03 15:34:26
6680
发布2022-03-03 15:34:26
举报
文章被收录于专栏:从零开始学自动化测试

前言

validator 验证器也可以应用于 pydantic dataclasses.

pydantic dataclasses

pydantic 里面的 dataclassesdata 是 dataclasses.dataclass 和 validation 的结合。

代码语言:javascript
复制
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 验证器

代码语言:javascript
复制
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]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • pydantic dataclasses
  • 使用示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档