Python의 with exp() as obj:
구문은 '필수'입력 및 종료 메소드가있는 모든 객체에 적합합니다. 사람들이 obj.__del__
을 확장하려고 시도하는 경우를 고려하면 __enter__
및 __exit__
메소드를 대신 사용하는 것이 좋습니다.은 생성자를위한 컨텍스트 관리자입니다.
내가 처음 생각한 것은 입력 및 종료 메서드가있는 상태 시스템이었습니다. 어쨌든 처리 할 수있는 기본 요소이지만 상태 시스템의 실제 구현은 매우 간단합니다.
class State(object):
def __init__(self, strategy):
self.strategy = strategy
def __enter__(self, *args):
return self
def __call__(self, *args, **kwargs):
self.strategy(self, *args, **kwargs)
def __exit__(self, *args):
clean_up_things()
...
...
...
def state_handle():
states = (State(foo), State(bar), State(eggs))
for state in states:
with state() as s:
what_ever(s)
그러나 하나는 일반적으로 try/finally
조항 및/또는 yield
문을 대체 with XXX as YYY
구문을 볼 수 있다는 것, 그리고 한 가지 내가 발견은 파이썬 커뮤니티는 특정 기능이있을 때 무엇을 기대 알고 좋아하는 것입니다 유지 구현. 따라서 올바른 문제를 해결하기 위해 잘못된 철자가 사용되면 여전히 잘못된 대답입니다.
파이썬은 특정 이유로 발전기에 대해 with...as
구문을 의도적으로 예약 했습니까? 아니면이 구문을 적용 할 수 있습니까? 목적이 있다면 그 목적은 무엇입니까? (나는 PEP 8에 with/as
에 대한 언급을 거의 보지 못했습니다.
적절한 PEP는 [343] (을 http : 당신이 읽을
원래 파이썬 개선 제안은 흥미로운 일이 될 수 있습니다.org/dev/peps/pep-0343 /). – jonrsharpe
* 그러나 일반적으로 try/finally 절 및/또는 yield 문 대신에 XXX를 YYY 구문으로 사용하는 것으로 보입니다. 아니, 그렇지 않습니다. –