36. with as
1. 키워드
2. with as
에 사용할 수 있는 클래스 만들기
open
으로 파일을 열 때 with as
를 사용하여 파일 객체의 close
를 자동으로 호출해 주었다.
- 이런 방식으로
with as
를 사용하려면 클래스에 __enter__
와 __exit__
메서드를 구현해 주면 된다.
class 클래스이름:
def __enter__(self):
시작할때실행할코드
def __exit__(self, exc_type, exc_value, traceback):
종료할때실행할코드
with
에 클래스의 인스턴스를 지정하고 as
뒤에 결과를 저장할 변수를 지정한다.
- 다음은
open("hello.txt", "w")
처럼 동작하는 OpenHello
클래스이다.
class OpenHello:
def __enter__(self):
self.file = open("hello.txt", "w") # 파일 객체를 속성에 저장
return self.file # __enter__에서 값을 반환하면 as에 지정한 변수에 들어감
def __exit__(self, exc_type, exc_value, traceback):
self.file.close() # __exit__에서 파일 객체 닫기
with OpenHello() as hello:
hello.write("Hello, world!")
__enter__
메서드에서 값을 반환하면 as
에 지정한 변수에 들어간다.
- 여기서는
open
으로 파일 객체를 만들어서 반환했고, 이때 __exit__
에서도 파일 객체를 사용할 수 있도록 속성에 저장해 준다.
__exit__
메서드는 with as
를 완전히 벗어나면 호출되며, 여기서는 __exit__
에서 파일 객체를 닫았다.
- 이런 방식으로
__enter__
에서 객체를 생성하고 __exit__
에서 정리 작업을 하면 된다.
References