728x90
반응형
질문 : Python의 '__enter__'및 '__exit__'설명
누군가의 코드에서 이것을 봤습니다. 무슨 뜻이에요?
def __enter__(self):
return self
def __exit__(self, type, value, tb):
self.stream.close()
from __future__ import with_statement#for python2.5
class a(object):
def __enter__(self):
print 'sss'
return 'sss111'
def __exit__(self ,type, value, traceback):
print 'ok'
return False
with a() as s:
print s
print s
답변
이러한 매직 메서드 ( __enter__
, __exit__
with
문으로 쉽게 사용할 수있는 객체를 구현할 수 있습니다.
이 아이디어는 실행 된 '정리'코드가 필요한 코드를 쉽게 빌드 할 수 있도록한다는 것입니다 ( try-finally
블록으로 생각). 여기에 더 많은 설명이 있습니다 .
유용한 예는 데이터베이스 연결 개체 (해당 'with'문이 범위를 벗어나면 자동으로 연결을 닫음) 일 수 있습니다.
class DatabaseConnection(object):
def __enter__(self):
# make a database connection and return it
...
return self.dbconn
def __exit__(self, exc_type, exc_val, exc_tb):
# make sure the dbconnection gets closed
self.dbconn.close()
...
위에서 설명한 with
합니다 (Python 2.5를 사용하는 경우 파일 맨 위에있는 from __future__ import with_statement
에서 수행해야 할 수 있음).
with DatabaseConnection() as mydbconn:
# do stuff
PEP343- 'with'문 ' 에도 멋진 글이 있습니다.
출처 : https://stackoverflow.com/questions/1984325/explaining-pythons-enter-and-exit
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
mysqldb python 인터페이스를 설치할 때 mysql_config를 찾을 수 없을 경우 (0) | 2022.01.17 |
---|---|
파이썬에서 정적 클래스 변수를 사용하는 방법 (0) | 2022.01.17 |
다른 Python 버전에서 가상 환경을 사용하는 방법 (0) | 2022.01.06 |
Python 여러 줄 문자열을 작성할 때 적절한 들여쓰기 (0) | 2021.12.19 |
Python에서 예외를 출력하는 방법 (0) | 2021.12.19 |