클래스도 객체고 기본 메타클래스는 type이야
type(name, bases, namespace)로 class 문과 같은 객체를 만들 수 있어. 메타클래스는 클래스 객체가 만들어질 때 이름·부모·본문을 검사하거나 바꿔.
강력한 만큼 적용 범위가 넓어
등록, 선언 검증, 프레임워크 규약처럼 모든 하위 클래스 생성에 개입해야 할 때 쓸 수 있지만, 상속 계층 전체의 동작을 어렵게 만들고 다른 메타클래스와 충돌할 수 있어.
먼저 더 작은 도구를 골라
하위 클래스가 생길 때 알림만 필요하면 __init_subclass__, 한 클래스만 바꾸면 클래스 데코레이터가 대개 충분해. 메타클래스는 두 방법으로 표현되지 않는 클래스 생성 규칙에 남겨.