자원을 획득하고, 사용하고, 반납할때 유용하게 사용할 수 있는 문법.
프로그램시 자원의 활용은
순으로 이어진다.
예를들어
방식이다.
# 자원의 획득
f = open("my_text_file.txt", "r")
# 자원의 사용
text = f.read()
print(text)
# 자원의 반납
f.close()
이러한 방식으로 자원을 활용할 수 있다.
with open("my_text_file.txt", "r") as f:
text = f.read()
print(text)
이렇게 with
문이 끝날 때 close
를 써주지 않아도 알아서 close
가 된다.
with
문은 위와 같이 객체의 Life Cycle을 설계할 수 있다.
(획득 -> 사용 -> 반납) 또는 (생성 -> 사용 -> 소멸) 등.
class PrintNumber:
# 사용할 자원 생성 및 획득.
def __enter__(self):
print("start.")
return self
# 자원 사용.
def print_number(self, num):
print(f"Number: {num}")
# 자원 반납 및 후처리.
def __exit__(self, exc_type, exc_val, exc_tb):
print("end.")
with PrintNumber() as pn:
pn.print_number(42)
pn.print_number(10)
start.
Number: 42
Number: 10
end.