정보처리기사 실기PythonPython - 리스트 컴프리헨션과 조건난이도 4SHORT_ANSWER

정보처리기사 실기 Python - 리스트 컴프리헨션과 조건 기출문제 #3147

문제

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

Python
class MetaValidator(type): def __new__(cls, name, bases, attrs): if name != 'BaseValidator': attrs['validation_count'] = len([attr for attr in attrs if not attr.startswith('_')]) attrs['base_count'] = len(bases) attrs['total_score'] = attrs['validation_count'] * attrs['base_count'] * 10 return super().__new__(cls, name, bases, attrs) class BaseValidator(metaclass=MetaValidator): pass class SingleValidator(BaseValidator): def check_format(self): pass def validate_length(self): pass class MultiValidator(BaseValidator, object): def verify_syntax(self): pass def check_encoding(self): pass def validate_structure(self): pass print(SingleValidator.total_score) print(MultiValidator.total_score)

정답

20 60

2060

해설

메타클래스 MetaValidator의 new 메서드가 클래스 생성 시 동적으로 속성을 설정한다. SingleValidator는 2개의 메서드(check_format, validate_length)와 1개의 베이스 클래스(BaseValidator)를 가지므로 total_score = 2 * 1 * 10 = 20이다. MultiValidator는 3개의 메서드(verify_syntax, check_encoding, validate_structure)와 2개의 베이스 클래스(BaseValidator, object)를 가지므로 total_score = 3 * 2 * 10 = 60이다. BaseValidator는 name이 'BaseValidator'이므로 동적 속성 생성 로직을 건너뛴다.

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

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

[정보처리기사 실기] Python - 리스트 컴프리헨션과 조건 Python 기출 #3147 | sqldpass