如何给Pydantic列表字段提供默认值?

问题描述

我想创建一个Pydantic模型,其中有一个列表字段,未进行初始化的认值为空列表。有没有惯用的方式做到这一点?

对于Python的内置数据类对象,您可以使用field(default_factory=list),但是在我自己的实验中,这似乎可以防止Pydantic模型被腌制。天真的实现可能是这样的:

from pydantic import BaseModel

class Foo(BaseModel):
    defaulted_list_field: Sequence[str] = [] # Bad!

但是我们都知道不要使用像空列表文字这样的可变值作为认值。

那么给Pydantic列表字段一个认值的正确方法是什么?

解决方法

Pydantic也有default_factory parameter

from typing import Sequence
from pydantic import BaseModel,Field


class Foo(BaseModel):
    defaulted_list_field: Sequence[str] = Field(default_factory=list)