문제
다음 Python 코드의 실행 결과를 쓰시오.
Pythonclass Meta(type): def __new__(cls, name, bases, attrs): if bases: attrs['level'] = len([b for b in bases if hasattr(b, 'level')]) return super().__new__(cls, name, bases, attrs) class A(metaclass=Meta): pass class B(A): pass class C(B): pass class D(A, B): pass print(hasattr(A, 'level')) print(B.level) print(C.level) print(D.level)
정답
False 0 1 1
False
0
1
1False 0 1 1
해설
메타클래스 Meta의 new 메서드는 클래스 생성 시 bases 튜플에서 'level' 속성을 가진 부모 클래스의 개수를 세어 level 속성으로 설정한다.
- A: bases가 비어있으므로 level 속성이 생성되지 않는다 → hasattr(A, 'level') = False
- B: A를 상속하지만 A에는 level 속성이 없으므로 level = 0
- C: B를 상속하고 B에는 level 속성이 있으므로 level = 1
- D: A와 B를 다중 상속하는데, B만 level 속성을 가지므로 level = 1