콘텐츠로 이동

00 · 강의에 필요한 Python 메커니즘

강의에 필요한 Python 메커니즘

연산자 디스패치, 데코레이터, dataclass를 통해 표현식이 라이브러리 메서드에 도달하는 과정을 봅니다.

이 장을 읽기 전에

함수, 클래스, 조건문과 간단한 타입 표기를 읽을 수 있습니다.

이 장을 마치면
  • ‘강의에 필요한 Python 메커니즘’의 수학적 정의를 자신의 말로 설명하기
  • 그 정의가 Python 데이터로 표현되는 방법 찾기
  • 실제 코드에서 작은 실행 과정을 예측하기
수학적 정의

Python의 `a + b`와 `a == b`는 각각 `__add__`, `__eq__`를 요청합니다. 데코레이터는 정의 시점에 함수 객체를 받아 바꿉니다.

데이터 표현

frozen dataclass는 불변 값을 저장합니다. `@log` 메서드는 내부적으로 결과와 지연 메시지를 반환하고 래퍼는 결과만 공개합니다.

Python 구현

`+` → `__add__`; `==` → `__eq__`; `@log` → `inner`

함께 읽을 구현과 테스트

peano/utils.py · tests/test_utils.py

수학적 정의

수학적 정의

Python의 a + b와 a == b는 각각 __add__, __eq__를 요청합니다. 데코레이터는 정의 시점에 함수 객체를 받아 바꿉니다.

데이터 표현

데이터 표현

frozen dataclass는 불변 값을 저장합니다. @log 메서드는 내부적으로 결과와 지연 메시지를 반환하고 래퍼는 결과만 공개합니다.

Python 구현

Python 구현

inner가 원래 메서드를 호출해 (result, message)를 나누고 필요할 때 기록한 뒤 result를 반환하며, @wraps는 메타데이터를 보존합니다.

이 강의에서 사용하는 정확한 대응:

`+` → `__add__`; `==` → `__eq__`; `@log` → `inner`

실행 과정

실행 과정

메서드 본문이 끝나야 래퍼가 메시지를 받으므로 안쪽 재귀 호출의 로그가 먼저 나옵니다.

실행 전 예측

`structural_str()`과 `+`가 어떤 코드를 부르는지, 두 출력이 무엇인지 적으세요.

실험 · 강의에 필요한 Python 메커니즘 실행 전
⌘ / Ctrl + Enter
출력
먼저 예측을 적고 실행하세요.

테스트로 확인

테스트로 확인

테스트는 반환값, 공개 시그니처, 메시지의 지연 평가를 확인합니다.

범위와 한계

범위와 한계

기초 문법은 반복하지 않고 이 구현을 읽는 데 필요한 메타프로그래밍만 다룹니다.

‘강의에 필요한 Python 메커니즘’의 구현을 올바르게 설명한 것은 무엇인가요?