00 · 강의에 필요한 Python 메커니즘
강의에 필요한 Python 메커니즘¶
연산자 디스패치, 데코레이터, dataclass를 통해 표현식이 라이브러리 메서드에 도달하는 과정을 봅니다.
함수, 클래스, 조건문과 간단한 타입 표기를 읽을 수 있습니다.
- ‘강의에 필요한 Python 메커니즘’의 수학적 정의를 자신의 말로 설명하기
- 그 정의가 Python 데이터로 표현되는 방법 찾기
- 실제 코드에서 작은 실행 과정을 예측하기
Python의 `a + b`와 `a == b`는 각각 `__add__`, `__eq__`를 요청합니다. 데코레이터는 정의 시점에 함수 객체를 받아 바꿉니다.
frozen dataclass는 불변 값을 저장합니다. `@log` 메서드는 내부적으로 결과와 지연 메시지를 반환하고 래퍼는 결과만 공개합니다.
`+` → `__add__`; `==` → `__eq__`; `@log` → `inner`
수학적 정의
수학적 정의¶
Python의 a + b와 a == b는 각각 __add__, __eq__를 요청합니다. 데코레이터는 정의 시점에 함수 객체를 받아 바꿉니다.
데이터 표현
데이터 표현¶
frozen dataclass는 불변 값을 저장합니다. @log 메서드는 내부적으로 결과와 지연 메시지를 반환하고 래퍼는 결과만 공개합니다.
Python 구현
Python 구현¶
inner가 원래 메서드를 호출해 (result, message)를 나누고 필요할 때 기록한 뒤 result를 반환하며, @wraps는 메타데이터를 보존합니다.
이 강의에서 사용하는 정확한 대응:
실행 과정
실행 과정¶
메서드 본문이 끝나야 래퍼가 메시지를 받으므로 안쪽 재귀 호출의 로그가 먼저 나옵니다.
`structural_str()`과 `+`가 어떤 코드를 부르는지, 두 출력이 무엇인지 적으세요.
먼저 예측을 적고 실행하세요.
테스트로 확인
테스트로 확인¶
테스트는 반환값, 공개 시그니처, 메시지의 지연 평가를 확인합니다.
범위와 한계
범위와 한계¶
기초 문법은 반복하지 않고 이 구현을 읽는 데 필요한 메타프로그래밍만 다룹니다.