2017-12-31 277 views
0

with 문 범위를 벗어나기 전에 클래스의 인스턴스가 무언가를 수행하도록 재정의 할 수있는 클래스 속성이 있습니까?클래스가`with` 문을 종료 할 때 작업을 수행하도록 만들기

with open(PATH, 'wb') as f: 
    f.write("SOME TEXT") 

이 같은 클래스의 평생 지속 작가를 필요로하는 클래스를 썼다면 :

예를 들어, 우리는 우리가 함께 할 때 우리는 파일 핸들을 닫는 것이 보장 할 수 있습니다 :

with MyWriter(PATH) as mw: 
    mw.write("SOME TEXT") 
:

class MyWriter(object): 

    def __init__(self, path): 
     self.f = open(path, 'wb') 
     self.buffer = '' 

    def write(self, text): 
     self.buffer += text 
     # Just a toy example, naively relying on file system 
     # page cache should outperform this 
     if len(self.buffer) >= 4096: 
      self.flush() 

    def flush(self): 
     f.write(self.buffer) 
     self.buffer = '' 

    def close(self): 
     self.flush() 
     self.f.close() 

는 내가 with의 범위를 종료하기 전에 .close()와 플러시 전화를 강제로 싶습니다

답변

0

찾고있는 용어는 컨텍스트 관리자입니다. 그것이 with 문과 함께 사용될 때 객체가 호출되는 것입니다.

공식 Python 설명서에는 매우 좋은 documentation on context managers가 있습니다. PEP 343에는 좋은 배경 정보와 좋은 예가 있습니다.