代码之家  ›  专栏  ›  技术社区  ›  J. Donič

用Pydantic的BaseSettings生成条件变量

  •  0
  • J. Donič  · 技术社区  · 3 年前

    我目前正在将我的配置设置迁移到Pydantic的基本设置。但是,我需要在 Settings 课堂上,我不知道该怎么做:

    例如,我目前有:

    class Settings(BaseSetting):
        name: str = "name"
        age: int = 25
    

    我想添加一些这样的逻辑:

    class Settings(BaseSetting):
        name: str = "name"
        age: int = 25
    
        if age > 50:
            old_person: bool = True
    

    在pydantic中,最好的方法是什么?

    1 回复  |  直到 3 年前
        1
  •  1
  •   larsks    3 年前

    使用 root validator 。您可能还想启用 validate_assignment 选项,以便在通过赋值更改属性后运行验证:

    from pydantic import BaseSettings, root_validator
    
    class Settings(BaseSettings):
        name: str = "name"
        age: int = 25
        old_person: bool = False
    
        @root_validator
        def validate_old_person(cls, values):
          values['old_person'] = values['age'] > 50
          return values
    
        class Config:
            validate_assignment = True
    

    如果我们运行以下代码:

    # Creating an object with the defaults
    settings = Settings()
    print(settings)
    
    # Create an object with an advanced age
    settings = Settings(age=60)
    print(settings)
    
    # Create an object with the defaults, then modify it
    settings = Settings()
    settings.age = 60
    print(settings)
    

    输出为:

    name='name' age=25 old_person=False
    name='name' age=60 old_person=True
    name='name' age=60 old_person=True
    
    推荐文章