일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- dart 언어
- jupyter
- Python
- jupyter lab
- C# delegate
- vim
- git
- 플러터
- c# 추상 클래스
- gitlab
- c#
- docker
- 깃
- c# 윈폼
- Flutter
- 포인터
- c언어
- 다트 언어
- C언어 포인터
- Houdini
- 유니티
- 구조체
- 도커
- C++
- Data Structure
- c# winform
- Unity
- HTML
- github
- Algorithm
Archives
- Today
- Total
nomad-programmer
[Programming/Python] with as에 사용할 수 있는 클래스 만들기 본문
open으로 파일을 열 때 with as를 사용하여 파일 객체의 close를 자동으로 호출해주었다. 이런 방식으로 with as를 사용하려면 클래스에 __enter__와 __exit__ 메서드를 구현해주면 된다.
class 클래스이름:
def __enter__(self):
# 시작할 때 실행할 코드
def __exit__(self, exe_type, exc_val, exc_tb):
# 종료할 때 실행할 코드
with에 클래스의 인스턴스를 지정하고 as 뒤에 결과를 저장할 변수를 지정한다.
with 클래스() as 변수:
# 코드
다음은 open('hello.tt', 'w') 처럼 동작하는 OpenHello 클래스이다.
class OpenHello:
def __enter__(self):
# 파일 객체를 속성에 저장
self.file = open('hello.txt', 'w')
# __enter__에서 값을 반환하면 as에 지정한 변수에 들어감
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
# __exit__에서 파일 객체 닫기
self.file.close()
with OpenHello() as hello:
hello.write('Hello, World!')
__enter__ 메서드에서 값을 반환하면 as에 지정한 변수에 들어간다. 여기서는 open으로 파일 객체를 만들어 반환했다. 이때 __exit__ 에서도 파일 객체를 사용할 수 있도록 속성에 저장해준다.
__exit__ 메서드는 with as를 완전히 벗어나면 호출된다. 따라서 여기서는 __exit__에서 파일 객체를 닫았다. 이런 방식으로 __enter__에서 객체를 생성하고 __exit__에서 정리 작업을 하면 된다.
'Programming > Python' 카테고리의 다른 글
[Programming/Python] FastAPI & Typer (0) | 2023.03.30 |
---|---|
[Programming/Python] asyncio (Asynchronous I/O) 비동기 프로그래밍 (0) | 2023.02.01 |
[Programming/Python] 정규표현식 (regular expression) (0) | 2023.02.01 |
[Programming/Python] 데코레이터 (decorator) (0) | 2023.01.31 |
[Programming/Python] 코루틴 (coroutine) (2) | 2023.01.29 |
Comments