Skip to content

第二章:快速上手:你的第一个模型 ​

2.1 三分钟入门 ​

Pydantic 的核心是 BaseModel。所有数据模型都继承它:

python
from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int
    is_active: bool = True   # 带默认值,可选字段

# 创建实例 = 校验数据
user = User(name="小明", age="18")   # 注意 age 传的是字符串!

print(user.name)       # 小明
print(user.age)        # 18  —— 自动转成了 int!
print(user.is_active)  # True —— 用了默认值

看到了吗?age="18" 传的是字符串,Pydantic 自动做了合理的类型转换。这叫"智能解析",是 Pydantic 的招牌能力。

2.2 校验失败会发生什么? ​

python
User(name="小明", age="十八")

抛出 ValidationError,信息非常友好:

1 validation error for User
age
  Input should be a valid integer, unable to parse string as an integer
  [type=int_parsing, input_value='十八', input_type=str]

它告诉你:哪个模型、哪个字段、期望什么、实际收到什么。调试体验一流。

2.3 从字典 / JSON 创建数据 ​

实际工作中数据往往来自字典或 JSON 字符串:

python
# 从字典
data = {"name": "小红", "age": 20}
user = User.model_validate(data)        # v1 写法:User.parse_obj(data)

# 从 JSON 字符串
json_str = '{"name": "小红", "age": 20}'
user = User.model_validate_json(json_str)  # v1 写法:User.parse_raw(json_str)

2.4 和 dataclass 的区别? ​

Python 自带的 @dataclass 也能定义数据结构,但它 不做校验,只是帮你省去写 __init__。Pydantic 模型 = dataclass 的便利性 + 强大的运行时校验。Pydantic 也提供了校验版的 dataclass(pydantic.dataclasses.dataclass),但绝大多数场景用 BaseModel 就够了。