Pydantic如何在Config类中实现重写默认值?



当您创建Pydantic BaseModel类时,您可以像这样覆盖类Config类:

class MyModel(BaseModel):
name: str = "Tom"
class Config:
title = "Custom Title"

然后覆盖BaseConfig的默认值:

class BaseConfig:
title: Optional[str] = None
anystr_lower: bool = False
anystr_strip_whitespace: bool = False
min_anystr_length: int = 0
max_anystr_length: Optional[int] = None
validate_all: bool = False
extra: Extra = Extra.ignore
allow_mutation: bool = True
frozen: bool = False
allow_population_by_field_name: bool = False
use_enum_values: bool = False
fields: Dict[str, Union[str, Dict[str, str]]] = {}
validate_assignment: bool = False
error_msg_templates: Dict[str, str] = {}
arbitrary_types_allowed: bool = False
orm_mode: bool = False
getter_dict: Type[GetterDict] = GetterDict
alias_generator: Optional[Callable[[str], str]] = None
keep_untouched: Tuple[type, ...] = ()
schema_extra: Union[Dict[str, Any], 'SchemaExtraCallable'] = {}
json_loads: Callable[[str], Any] = json.loads
json_dumps: Callable[..., str] = json.dumps
# key type should include ForwardRef, but that breaks with python3.6
json_encoders: Dict[Union[Type[Any], str], AnyCallable] = {}
underscore_attrs_are_private: bool = False

这个子类Config是如何实现的,以便你可以覆盖默认值?

例如,如何为这个类设计实现类似的设计模式:
class BaseConfig:
n_legs = 2
n_arms = 2

class BasePerson:
Config = BaseConfig
name: str

class Person(BasePerson):
class Config:
n_arms = 1

所以当你做

p = Person()

p.Config.n_arms == 1
p.Config.n_legs == 2

可以通过类继承来实现

class Person(BasePerson):
class Config(BasePerson.Config):
n_arms = 1