init

del

str

repr

enterexit

__enter____exit__ 可以用來實作與 with...as... 陳述句配合時的詳細過程,這樣的方法常使用在在開啟一個資源後,需要手動關閉該資源的情況,並且也能很好的處理過程中所拋出的異常。

with 陳述句一開始執行時,就會進入 __enter__() 方法,該方法回傳的物件,可以使用 as 指定給變數,接著就會執行 with 區塊中的程式碼。

同時如果 with 區塊中的程式碼發生例外,則會執行__exit__() 方法,並傳入三個參數,即例外處理中的 sys.exc_info() 所回傳的三個參數

此時 __exit__() 方法若回傳 False,則異常會被重新丟出,回傳 True 就跳過異常,通常 __exit__() 會傳回 False 以在 with 之外還可以處理例外。

如果 with 區塊中沒有發生異常而執行完畢,則也是執行 __exit__() 方法,此時 __exit__() 的三個參數都接收到 None

Example 1

class Sample:
    def __enter__(self):
        print("in __enter__")
        return "Foo"

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("in __exit__")

def get_sample():
    return Sample()

with get_sample() as sample:
    print("Sample: ", sample)

Output :

in __enter__
Sample:  Foo
in __exit__