에 __enter__에 의해 반환하기,이 코드가 있습니다예를 들어 __exit__
with MyClass() as x:
print 'I have only {0}'.format(x)
with MyClass() as y:
print 'I have {0} and {1}'.format(x, y)
print 'Again only {0}'.format(x)
x
및 y
모두 with
블록의 해당 종료 후 해제 초기화되어야한다. x
및 y
도 MyClass
이 아닙니다.
__exit__
에는 3 개의 인수 만 있고 각 인수는 없음 (예외가 제공되지 않은 경우)입니다.
방금 블록이 종료되고 어떤 값이 __enter__
에 의해 반환되었는지 __exit__
에서 어떻게 확인할 수 있습니까?
(N.B. 코드는 스레드로부터 안전해야합니다).
예 :
당신이 당신의 상황을 처리하는 사용자 정의 클래스를 가지고 있기 때문에class MyClass(object):
def __enter__(self):
if moon_phase > 0:
return 123
else:
return 456
def __exit__(self):
number = what_was_returned_by_enter()
print 'End of block with', number
with MyClass() as x:
print x # 123
with MyClass() as y:
print x, 'and', y # 123 and 456
# printed "End of block with 456"
print x # 123
# printed "End of block with 123"
그냥 인스턴스 변수에 저장하여 반환 된 값을 추적 :
__exit__
가 호출 될 때 다시 검색 할 수 있도록다음은 인스턴스
__enter__
의 반환 값을 저장합니다. – sloth