본문 바로가기
python

[파이썬] with ~ as 구문의 이해

디지털노마드 2023. 2. 7.
반응형

 

다른사람이 짠 python 코드를 보다가 문득 with as 구문이 많이 나오는 것을 봤다. 

구글링을 해보면 어떤 객체에 대한 리소스를 사용하고 완벽하게 돌려줄때 사용한다고 하는데, 

일단 대부분의 예제가 파일을 열고 닫는 것에 대한 예제라서 이해가 안되어

한번 처음부터 만들어 봤다. 

 

class with_test:

    def __init__(self, param):

        self.num = param
        print("init")

    def get_num(self) -> int:

        return self.num

    def print_func(self):

        print("{} print".format(self.num))

    def __enter__(self):

        print("enter")

        return self

    def __exit__(self, exc_type, exc_val, exc_tb):

        print("exit")

        return self

 

일단 class 를 하나 만들었다. 이 class 에는 기본적인 __init__ 함수가 있고 파라미터를 self.num 으로 넘겨준다. 

 with 구문의 시작에 필요한 __enter__ 를 만들었고, 나중에 알았지만, __enter__ 의 return 에 self 를 넣어줘야 with 구문을 정상적으로 돌릴 수 있다. with 구문이 끝날때 자동으로 불리는 __exit__ 도 간단하게 구현했다. 

 

engine1 = with_test(5)
print(engine1.get_num())

 

일단 이 class 는 위와 같이 간단하게 객체를 만들수 있다. 

engine1 이라는 객체를 만들어서 num 을 출력한 코드이다. 결과값은 5가 나온다. 

 

아래와 같이 with as 구문을 사용할 수도 있다. 

 

with with_test(5) as engine2:
    engine2.print_func()
    print(engine2.get_num())

 

with 구문을 사용해서 engine2 라는 객체를 만들었다. 

코드에는 안보이지만, 로그를 보면 __enter__ 와 __exit__가 정상적으로 불리는 것을 확인 할 수 있다. 

 

 

반응형

댓글