unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Context Manager

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 blok with, yang mengembalikan objek file.
  • file.__exit__() dipanggil setelah blok with 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 Dekorator

    Dekorator 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.

« Multi Process
Decorator »