정보처리기사 실기PythonPython - 클래스와 매직 메서드난이도 5SHORT_ANSWER

정보처리기사 실기 Python - 클래스와 매직 메서드 기출문제 #331

문제

다음 Python 코드의 실행 결과를 쓰시오.

Python
class Meta(type): def __new__(cls, name, bases, dct): if len(bases) > 1: dct['priority'] = sum(getattr(base, 'priority', 0) for base in bases) else: dct['priority'] = 1 return super().__new__(cls, name, bases, dct) class A(metaclass=Meta): value = 10 class B(metaclass=Meta): value = 20 class C(A, B, metaclass=Meta): pass class D(C, metaclass=Meta): pass print(A.priority) print(B.priority) print(C.priority) print(D.priority)

정답

1 1 2 1

1 1 2 11 1 2 1

해설

메타클래스 Meta의 new 메서드가 클래스 생성 시 호출되어 priority 속성을 동적으로 설정한다.

  1. A: bases가 비어있으므로(len(bases) = 0 ≤ 1) priority = 1
  2. B: bases가 비어있으므로(len(bases) = 0 ≤ 1) priority = 1
  3. C: A, B를 다중 상속하므로(len(bases) = 2 > 1) priority = A.priority + B.priority = 1 + 1 = 2
  4. D: C만 상속하므로(len(bases) = 1 ≤ 1) priority = 1 메타클래스의 new 메서드는 각 클래스가 정의될 때마다 실행되어 해당 클래스의 bases 길이에 따라 priority를 새로 계산하여 설정한다.

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.