Context Manager
개념
- 지난 포스팅에서 살펴봤듯 특정 작업 전후에 필요한 작업을 자동으로 처리하는 것을 의미한다.
__enter__() 메서드와 __exit__() 메서드가 각각 사전작업, 사후작업을 맡아 처리한다.
- 엄밀히 구분하면 with 구문에서 직접 쓰이는 것은 컨텍스트 매니저 인스턴스 , 그리고 이를 만들어내는 클래스는 컨택스트 매니저 클래스 라고 할 수 있다.
구조
1
2
3
4
5
6
7
| class ClassName:
def __enter__(self, params):
# ... 사전 처리 ...
def __exit__(self, exc_type, exc_value, traceback):
# ... 사후 처리 ...
|
예시
- 단순히 프린트를 출력하고, 컨텍스트가 닫히면 프린트 내역을 파일로 저장하는 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| class PrintRecorder:
def __enter__(self):
from datetime import datetime
self.start_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.print_history = list()
return self
def print(self, text):
print(text)
self.print_history.append(text)
def __exit__(self, exc_type, exc_value, traceback):
with open(f"{self.start_time}.txt", "w", encoding="utf-8") as f:
for text in self.print_history:
f.write(text + '\n')
|
1
2
3
4
| with PrintRecorder() as p:
p.print("안녕하세요")
p.print("반갑습니다")
p.print("프린트 기록 컨텍스트 매니저 테스트입니다.")
|
2026-03-20 01:52:26.txt 파일 내용
1
2
3
4
| 안녕하세요
반갑습니다
프린트 기록 컨텍스트 매니저 테스트입니다.
|
Comments