문제
다음 Python 코드의 실행 결과를 쓰시오.
Pythonclass Meta(type): def __new__(cls, name, bases, attrs): attrs['class_id'] = len(bases) + 1 return super().__new__(cls, name, bases, attrs) class A(metaclass=Meta): pass class B(A): pass class C(A, B): pass print(A.class_id) print(B.class_id) print(C.class_id)
정답
1 2 3
123
해설
메타클래스의 new 메서드에서 attrs['class_id'] = len(bases) + 1로 설정한다. 클래스 A는 bases가 빈 튜플 ()이므로 len(bases) = 0, class_id = 1이다. 클래스 B는 bases가 (A,)이므로 len(bases) = 1, class_id = 2이다. 클래스 C는 bases가 (A, B)이므로 len(bases) = 2, class_id = 3이다. 메타클래스는 클래스 생성 시점에 호출되어 클래스 속성을 동적으로 추가할 수 있다.