Pydantic 라이브러리에서 제공되는 구성 옵션을 딕셔너리 형태로 지정할 수 있는 클래스
이 클래스를 사용해 모델의 구성 옵션을 설정하고 수정한다.
일반적으로 Pydantic 모델은 클래스 변수로 'Config' 클래스를 사용하여 구성 옵션을 지정한다.
경우에 따라 프로그램이 실행되는 동안에 동적으로 구성을 변경하거나, 환경 변수에 따라 구성을 조정해야 할 수도 있다. 이 때 pydantic.ConfigDict
을 사용해서 구성 옵션을 딕셔너리 형태로 관리한다.
pydantic.ConfigDict
으로 Pydantic 모델의 구성을 동적으로 변경하기from pydantic import BaseModel, ConfigDict
class MyModel(BaseModel):
class Config:
allow_mutation = False # 모델의 인스턴스를 변경할 수 없도록 설정
# 모델의 구성 옵션을 딕셔너리로 설정
MyModel.Config.__dict__.update(ConfigDict(allow_mutation=True))
# allow_mutation 옵션이 변경된 것을 확인
print(MyModel.Config.allow_mutation) # 출력 : True
위에서 'MyModel' 클래스의 구성 옵션인 'allow_mutation'을 딕셔너리 형태로 동적으로 변경하고 있음. 이렇게 하면 프로그램이 실행되는 도안에 구성을 변경하고, 환경에 따라 구성을 조정할 수 있음
allow_mutation
Pydantic 모델의 구성 옵션 중 하나로 모델의 인스턴스가 변경 가능한지 여부를 지정한다.
기본적으로 Pydantic 모델은 불변(immutable) 이다. 한 번 생성된 모델의 인스턴스는 수정할 수 없다는 의미이다. 즉, 한 번 생성된 모델의 필드 값을 변경하거나 새로운 필드를 추가할 수 없다.
하지만 allow_mutation
옵션을 사용해 이 동작을 변경할 수 있다.
이 옵션을 True
로 설정해, 모델의 인스턴스를 변경할 수 있다.
즉, 필드 값을 수정하거나 새로운 필드를 추가할 수 있다.
from pydantic import BaseModel
class MyModel(BaseModel):
name: str
age: int
# 모델의 인스턴스 생성
instance = MyModel(name='Alice', age=30)
#allow_mutation을 True로 생성하여 모델의 인스턴스를 변경 가능하도록 함
MyModel.Config.allow_mutation = True
# 모델의 인스턴스 변경
instance.name = 'Bob'
instance.email = 'bob@example.com'
print(instance.dict())
# 출력 : {'name' : 'Bob', 'age' : 30, 'email' : 'bob@example.com'}
위에서 'MyModel' 클래스의 구성 옵션인 'allow_mutation'을 'True'로 설정해 모델의 인스턴스를 변경 가능하게 했다.
그 결과로 인스턴스 필드 값이 변경되고 새로운 필드를 추가할 수 있게 됐다.
ConfigDict - Protected_namespaces
protected namespaces 지정 옵션은 보호된 네임스페이스를 지정하는 옵션이다.
Pydantic 모델은 Config
클래스 내에 여러 가지 옵션을 정의할 수 있다. 이 옵션들은 모델의 동작을 제어하고 구성할 수 있는데, 이 중에서도 protected_namespaces
는 모델에서 사용할 수 있는 네임스페이스(예: Config
, schema
, json_encoders
등) 중에서 특정한 네임스페이스를 보호하고자 할 때 사용된다.
protected_namspaces
옵션을 사용하면 해당 네임스페이스에서의 속성 변경을 방지할 수 있다.
from pydantic import BaseModel, ConfigDict
class MyModel(BaseModel):
class Config:
# Config 네임스페이스를 보호하여 변경을 방지
protected_namespaces = ('Config',)
# protected_namespaces를 설정한 모델 생성
model = MyModel()
# Config 네임스페이스를 변경하려고 하면 예외가 발생
try :
model.Coifng = 'changed_config'
except AttritubeError as e:
print(e)
# 출력 : 'Config' is a proteced namespace
'MyModel' 클래스의 'Config' 네임스페이스를 보호하여 속성의 변경을 방지한다. 이렇게 설정하면 모델의 인스턴스에서 해당 네임스페이스의 속성을 변경할 수 없다. 따라서 속성에 대한 변경 시도가 있으면 AttributeError가 발생한다.