문제
다음 Python 코드의 실행 결과를 쓰시오.
Pythonclass Descriptor: def __init__(self, name): self.name = name def __get__(self, obj, owner): if obj is None: return self return getattr(obj, f'_{self.name}') def __set__(self, obj, value): setattr(obj, f'_{self.name}', value * 2) class MyClass: x = Descriptor('x') def __init__(self, value): self.x = value a = MyClass(5) print(a.x) print(a._x) b = MyClass(3) print(isinstance(MyClass.x, Descriptor)) print(type(MyClass.x).__name__)
정답
10 10 True Descriptor
10
10
True
Descriptor10 10 True Descriptor
해설
- MyClass(5) 생성 시 self.x = 5가 실행되어 Descriptor의 set 메서드가 호출된다. value * 2 = 5 * 2 = 10이 _x 속성에 저장된다.
- a.x 접근 시 Descriptor의 get 메서드가 호출되어 a._x 값인 10을 반환한다.
- a._x 직접 접근 시 저장된 값 10을 반환한다.
- MyClass(3) 생성 시 마찬가지로 3 * 2 = 6이 _x에 저장되지만 출력하지 않는다.
- isinstance(MyClass.x, Descriptor) 검사는 MyClass.x가 Descriptor 인스턴스이므로 True를 반환한다.
- type(MyClass.x).__name__은 Descriptor 클래스의 이름인 'Descriptor'를 반환한다.