python 如何实现数据类、数据类型校验

问题:
在 python 中,如何实现数据类?
如何方便地对数据类型进行校验?

省流版

参考做法

  1. 安装 pydantic 这个第三方库
pip install pydantic
  1. 使用 pydantic 提供的 dataclass 定义数据类
from pydantic.dataclasses import dataclass

@dataclass
class Person:
    name: str
    phone_number: int
  1. 创建数据
# 这样能成功创建
my_person = Person(name="John", phone_number="13500000000")

# 这样无法通过数据检验, 会报错
my_person = Person(name="John", phone_number="this_is_not_a_number")

详细版

数据类

在 python 中, 如果想创建一个数据类,可以使用

from dataclasses import dataclass

用这个 dataclass 来装饰类
(注意, 这个模块是从 python 3.7 开始引入的)
比如

@dataclass
class Person:
    name: str
    phone_number: int

这样在实例化一个 Person 对象时, 就必须要传入 name 和 phone_number 这两个属性才能实例化.

my_person = Person(name="John", phone_number=13500000000)

如果缺少某个内容参数则会报错

my_person = Person(name="John")
TypeError: __init__() missing 1 required positional argument: 'name'

参数校验

但是这个 dataclass 不带参数校验, 也就是说在实例化时, 只要你传入了所有必须的参数, 就算这些参数不符合要求, 比如这样

my_person = Person(name="John", phone_number="this_is_not_a_number")

IDEA会检验到数据类型不对,

Expected type "int", got "str" instead

但是程序依然能够跑起来, 你依然能够不按规定类型去实例化这个 Person

参考做法

  1. 安装 pydantic 这个第三方库
pip install pydantic
  1. 使用 pydantic 提供的 dataclass 定义数据类, 而不是 python 自带 dataclasses 模块的 dataclass
from pydantic.dataclasses import dataclass
  1. 定义数据类
@dataclass
class Person:
    name: str
    phone_number: int
  1. 创建数据
# 这样能成功创建
my_person = Person(name="John", phone_number="13500000000")

# 这样无法通过数据检验, 会报错
my_person = Person(name="John", phone_number="this_is_not_a_number")
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值