A. pydantic을 사용하면 된다.
from pydantic import BaseModel
class Person(BaseModel):
name: str = ''
gender: str = ''
if __name__ == '__main__':
john = Person()
john.age = 23
print(john.age)
pydantic을 사용하면 아래처럼 에러가 난다.
john.age = 23
File "pydantic/main.py", line 357, in pydantic.main.BaseModel.__setattr__
ValueError: "Person" object has no field "age"
같은 코드에서 pydantic BaseModel만 제거하면 잘 출력된다. 파이썬 객체의 경우 해당 클래스에 속성이 없으면 그냥 추가해서 저장하기 때문이다.
class Person:
name: str = 'John'
gender: str = 'Male'
if __name__ == '__main__':
john = Person()
john.age = 23
print(john.age)
print(john.gender)
print(john.name)
결과
23
Male
John
파이썬에서도 pydantic을 쓰면 C나 Java 등 다른 언어처럼 클래스에 미리 정의하지 않은 속성이 추가되는 것을 막을 수 있다.
데이터 클래스dataclass도 막아주지 않는다.
from dataclasses import dataclass
@dataclass
class Person:
name: str = 'John'
gender: str = 'Male'
if __name__ == '__main__':
john = Person()
john.age = 23
print(john.age)
print(john.name)
print(john.gender)
결과
23
John
Male