Context Manager #
Pengertian #
Context manager di Python adalah mekanisme yang memungkinkan Anda untuk mengelola sumber daya secara otomatis, seperti file atau koneksi jaringan, dengan memastikan bahwa sumber daya tersebut dibuka dan ditutup dengan benar. Ini membantu dalam menulis kode yang lebih bersih dan bebas dari kebocoran sumber daya.
Context manager biasanya digunakan dengan pernyataan with
. Ketika Anda menggunakan with
, Python akan memastikan bahwa metode __enter__
dari context manager dipanggil sebelum blok with
dieksekusi dan metode __exit__
dipanggil setelah blok tersebut selesai, terlepas dari apakah blok with
selesai dengan sukses atau karena pengecualian.
Penggunaan #
Menggunakan with
#
Contoh yang paling umum dari context manager adalah membuka file.
with open('example.txt', 'w') as file:
file.write('Hello, world!')
# Tidak perlu menutup file secara eksplisit, karena `with` statement akan menutupnya secara otomatis.
Dalam contoh di atas:
open('example.txt', 'w')
mengembalikan objek file yang mendukung context manager.file.__enter__()
dipanggil pada awal blokwith
, yang mengembalikan objek file.file.__exit__()
dipanggil setelah blokwith
selesai, memastikan file ditutup.
Context Manager Kustom #
Anda bisa membuat context manager sendiri dengan mendefinisikan kelas yang mengimplementasikan metode __enter__
dan __exit__
.
class MyContextManager:
def __enter__(self):
print("Entering the context")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("Exiting the context")
if exc_type is not None:
print(f"An exception occurred: {exc_value}")
return True # Menyerap pengecualian, mencegahnya untuk diperbanyak lebih jauh.
with MyContextManager() as manager:
print("Inside the context")
# Raise an exception to see __exit__ in action
raise ValueError("Something went wrong!")
Output:
Entering the context
Inside the context
Exiting the context
An exception occurred: Something went wrong!
Dekorator contextlib
#
Python juga menyediakan modul contextlib
yang menyederhanakan pembuatan context manager, terutama untuk kasus sederhana.
-
Menggunakan
contextlib.contextmanager
DekoratorDekorator ini memungkinkan Anda untuk membuat context manager menggunakan fungsi generator.
from contextlib import contextmanager @contextmanager def my_context_manager(): print("Entering the context") try: yield finally: print("Exiting the context") with my_context_manager(): print("Inside the context")
Output:
Entering the context Inside the context Exiting the context
-
Menggunakan
contextlib.ExitStack
ExitStack
memungkinkan Anda untuk mengelola beberapa context manager sekaligus.from contextlib import ExitStack with ExitStack() as stack: file1 = stack.enter_context(open('file1.txt', 'w')) file2 = stack.enter_context(open('file2.txt', 'w')) file1.write('Hello, file1!') file2.write('Hello, file2!')
Dalam contoh di atas, ExitStack
memastikan bahwa semua file ditutup dengan benar setelah blok with
selesai.
Kesimpulan #
Context manager di Python adalah alat yang kuat untuk mengelola sumber daya secara efisien dan aman. Dengan menggunakan pernyataan with
, Anda dapat memastikan bahwa sumber daya dibuka dan ditutup dengan benar, yang membantu dalam menulis kode yang lebih bersih dan bebas dari kebocoran sumber daya. Anda bisa membuat context manager sendiri menggunakan kelas atau dekorator contextlib.contextmanager
, serta mengelola beberapa context manager dengan contextlib.ExitStack
.