
1014
5
부
메타프로그래밍
이제
Checked
클래스를 살펴보자. 소스 코드를 두 부분으로 나누었다. [예제
24
-
5
]는 클래스
의 앞부분을 보여 주는데, 이 예제에서 가장 중요한 메서드들이 포함된다. 나머지 메서드는 [예
제
24
-
6
]에 있다.
예제
24-5
i
nitsub
/
checkedlib
.
py
:
Checked
클래스의 가장 중요한 메서드들
class Checked:
@classmethod
def _fields(cls) -> dict[str, type]: ❶
return get_type_hints(cls)
def __init_subclass__(subclass) -> None: ❷
super().__init_subclass__() ❸
for name, constructor in subclass._fields().items(): ❹
setattr(subclass, name, Field(name, constructor)) ❺
def __init__(self, **kwargs: Any) -> None:
for name in self._fields(): ❻
value = kwargs.pop(name, ...) ❼
setattr(self, name, value) ❽
if kwargs: ❾
self.__flag_unknown_attrs(*kwargs) ❿