아래 내용은 공부한 것을 정리하므로 틀린 내용이 포함되어 있을 수 있습니다.
1. contextlib모듈의 closing 활용
- contextlib 모듈을 통해서 어떠한 작업을할때 자동으로 close메소드를 호출하게끔 할 수 있습니다.
- 예제를 위해
close.py
파일을 작성합니다.class OpenClose: def open(self): print("작업을 시작합니다.") def do_something(self): print("작업을 진행합니다...") print("작업을 진행합니다...") print("작업을 진행합니다...") def close(self): print("작업을 종료합니다.") def doOpenClose(): d = OpenClose() d.open() d.do_something() d.close()
- REPL에서 실행해봅니다.
>>> from close import doOpenClose >>> doOpenClose() 작업을 시작합니다. 작업을 진행합니다... 작업을 진행합니다... 작업을 진행합니다... 작업을 종료합니다. >>>
- 명시적으로 OpenClose클래스의 메소드들을 하나씩 호출하였습니다.
- contextlib모듈의 closing메소드를 활용하면 자동으로 클래스 내부의 close메소드를 호출하게 할 수 있습니다.
- contextlib모듈의 closing메소드를 import하고
doOpenClose()
메소드를 아래와 같이 수정하였습니다. - with절로 감싸며, closing메소드를 사용했고,
close()
메소드를 이번에는 사용하지 않았습니다.from contextlib import closing ... 생략 ... def doOpenClose(): with closing(OpenClose()) as d : d.open() d.do_something()
- REPL을 종료하고 재실행하여 결과를 확인 합니다.
- close메소드를 실행하지 않았지만 closing메소드가 클래스 내부의 close메소드를 자동으로 실행해 줍니다.
>>> from close import doOpenClose >>> doOpenClose() 작업을 시작합니다. 작업을 진행합니다... 작업을 진행합니다... 작업을 진행합니다... 작업을 종료합니다.