콘텐츠로 이동

별칭

별칭은 데이터를 직렬화 및 역직렬화할 때 사용되는 필드의 대체 이름입니다.

다음과 같은 방법으로 별칭을 지정할 수 있습니다.

  • Fieldalias
    • str 이어야 합니다
  • Fieldvalidation_alias
  • Fieldserialization_alias
    • str 이어야 합니다
  • Configalias_generator
    • 호출 가능하거나 AliasGenerator의 인스턴스일 수 있습니다.

alias , validation_aliasserialization_alias 사용하는 방법에 대한 예는 필드 별칭을 참조하세요.

AliasPathAliasChoices

API 문서

pydantic.aliases.AliasPath
pydantic.aliases.AliasChoices

Pydantic은 validation_alias 사용할 때 편의를 위해 AliasPathAliasChoices 두 가지 특수 유형을 제공합니다.

AliasPath 는 별칭을 사용하여 필드에 대한 경로를 지정하는 데 사용됩니다. 예를 들어:

from pydantic import BaseModel, Field, AliasPath


class User(BaseModel):
    first_name: str = Field(validation_alias=AliasPath('names', 0))
    last_name: str = Field(validation_alias=AliasPath('names', 1))

user = User.model_validate({'names': ['John', 'Doe']})  # (1)!
print(user)
#> first_name='John' last_name='Doe'
  1. 우리는 필드 별칭을 사용하여 사전의 유효성을 검사하기 위해 model_validate 사용하고 있습니다.

API 참조에서 model_validate에 대한 자세한 내용을 확인할 수 있습니다.

'first_name' 필드에서는 별칭 'names' 와 인덱스 0 사용하여 이름에 대한 경로를 지정합니다. 'last_name' 필드에서는 별칭 'names' 와 인덱스 1 사용하여 성에 대한 경로를 지정합니다.

AliasChoices 별칭 선택을 지정하는 데 사용됩니다. 예를 들어:

from pydantic import BaseModel, Field, AliasChoices


class User(BaseModel):
    first_name: str = Field(validation_alias=AliasChoices('first_name', 'fname'))
    last_name: str = Field(validation_alias=AliasChoices('last_name', 'lname'))

user = User.model_validate({'fname': 'John', 'lname': 'Doe'})  # (1)!
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'first_name': 'John', 'lname': 'Doe'})  # (2)!
print(user)
#> first_name='John' last_name='Doe'
  1. 두 필드 모두에 두 번째 별칭 선택을 사용하고 있습니다.
  2. 'first_name' 필드에는 첫 번째 별칭 선택을 사용하고 'last_name' 필드에는 두 번째 별칭 선택을 사용합니다.

AliasPath 와 함께 AliasChoices 사용할 수도 있습니다.

from pydantic import BaseModel, Field, AliasPath, AliasChoices


class User(BaseModel):
    first_name: str = Field(validation_alias=AliasChoices('first_name', AliasPath('names', 0)))
    last_name: str = Field(validation_alias=AliasChoices('last_name', AliasPath('names', 1)))


user = User.model_validate({'first_name': 'John', 'last_name': 'Doe'})
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'names': ['John', 'Doe']})
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'names': ['John'], 'last_name': 'Doe'})
print(user)
#> first_name='John' last_name='Doe'

별칭 생성기 사용

Configalias_generator 매개변수를 사용하여 모델의 모든 필드에 대한 별칭을 생성할 호출 가능 항목(또는 AliasGenerator 통해 호출 가능 항목 그룹)을 지정할 수 있습니다. 이는 모델의 모든 필드에 대해 일관된 명명 규칙을 사용하고 싶지만 각 필드에 대한 별칭을 개별적으로 지정하고 싶지 않은 경우에 유용합니다.

!!! note Pydantic은 즉시 사용할 수 있는 세 가지 내장 별칭 생성기를 제공합니다.

[`to_pascal`][pydantic.alias_generators.to_pascal]<br>
[`to_camel`][pydantic.alias_generators.to_camel]<br>
[`to_snake`][pydantic.alias_generators.to_snake]<br>

콜러블 사용

다음은 콜러블을 사용하는 기본 예입니다.

from pydantic import BaseModel, ConfigDict


class Tree(BaseModel):
    model_config = ConfigDict(
        alias_generator=lambda field_name: field_name.upper()
    )

    age: int
    height: float
    kind: str


t = Tree.model_validate({'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'})
print(t.model_dump(by_alias=True))
#> {'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'}

AliasGenerator 사용

API 문서

pydantic.aliases.AliasGenerator

AliasGenerator 모델에 대해 여러 개의 별칭 생성기를 지정할 수 있는 클래스입니다. AliasGenerator 사용하여 유효성 검사 및 직렬화를 위한 다양한 별칭 생성기를 지정할 수 있습니다.

이는 데이터 로드 및 저장을 위해 다른 명명 규칙을 사용해야 하지만 각 필드에 대해 유효성 검사 및 직렬화 별칭을 개별적으로 지정하고 싶지 않은 경우에 특히 유용합니다.

예를 들어:

from pydantic import AliasGenerator, BaseModel, ConfigDict


class Tree(BaseModel):
    model_config = ConfigDict(
        alias_generator=AliasGenerator(
            validation_alias=lambda field_name: field_name.upper(),
            serialization_alias=lambda field_name: field_name.title(),
        )
    )

    age: int
    height: float
    kind: str


t = Tree.model_validate({'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'})
print(t.model_dump(by_alias=True))
#> {'Age': 12, 'Height': 1.2, 'Kind': 'oak'}

별칭 우선순위

Fieldalias 지정하면 기본적으로 생성된 별칭보다 우선 적용됩니다.

from pydantic import BaseModel, ConfigDict, Field


def to_camel(string: str) -> str:
    return ''.join(word.capitalize() for word in string.split('_'))


class Voice(BaseModel):
    model_config = ConfigDict(alias_generator=to_camel)

    name: str
    language_code: str = Field(alias='lang')


voice = Voice(Name='Filiz', lang='tr-TR')
print(voice.language_code)
#> tr-TR
print(voice.model_dump(by_alias=True))
#> {'Name': 'Filiz', 'lang': 'tr-TR'}

별칭 우선순위

이 동작을 변경하려면 필드에 alias_priority 설정할 수 있습니다.

  • alias_priority=2 별칭은 별칭 생성기에 의해 재정의되지 않습니다 .
  • alias_priority=1 별칭은 별칭 생성기에 의해 재정의 됩니다 .
  • alias_priority 설정되지 않았습니다.
    • 별칭이 설정됨: 별칭 생성기가 별칭을 재정의하지 않습니다 .
    • 별칭이 설정되지 않았습니다. 별칭 생성기가 별칭을 재정의 합니다 .

validation_aliasserialization_alias 에도 동일한 우선순위가 적용됩니다. 필드 별칭 아래에서 다양한 필드 별칭에 대해 자세히 알아보세요.


本文总阅读量