# with
with所求值的對象必須有一個__enter__()方法,一個__exit__()方法。緊跟with后面的語句被求值后,返回對象的__enter__()方法被調用,這個方法的返回值將被賦值給as后面的變量。當with后面的代碼塊全部被執行完之后,將調用前面返回對象的__exit__()方法。
```python
class Sample:
def __enter__(self):
print("In __enter__()")
return "Foo"
def __exit__(self, type, value, trace):
print("In __exit__()")
def get_sample():
return Sample()
with get_sample() as sample:
print("sample:" + sample)
'''
output:
In __enter__() # __enter__()方法被執行, 賦值給變量'sample'
sample:Foo # 執行代碼塊,打印變量"sample"的值為 "Foo"
In __exit__() # __exit__()方法被調用
'''
```