WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Python · Intermediate · question 32 of 100

What is a context manager in Python? How do you create one using a class or a generator?

📕 Buy this interview preparation book: 100 Python questions & answers — PDF + EPUB for $5

In Python, a context manager is a Python object that manages resources used by code block. It is responsible for setting up and tearing down the resources, and can be used with the with statement to ensure that the resources are properly handled, even if an error occurs.

There are two ways to create a context manager in Python: using a class or using a generator.

Creating a context manager using a class: To create a context manager using a class, you need to define two special methods: __enter__() and __exit__(). The __enter__() method is called when the code block is entered and returns the resource that will be managed. The __exit__() method is called when the code block is exited, whether normally or due to an exception, and is responsible for cleaning up the resource. Here is an example:

    class MyContextManager:
        def __enter__(self):
            # set up the resource
            return resource
    
    def __exit__(self, exc_type, exc_value, traceback):
        # clean up the resource
        pass
    
    with MyContextManager() as resource:
        # use the resource

In this example, MyContextManager is a context manager class that sets up and cleans up a resource. When the code block is entered, the __enter__() method is called and returns the resource. When the code block is exited, the __exit__() method is called and cleans up the resource.

Creating a context manager using a generator: To create a context manager using a generator, you need to define a function that uses the yield keyword to create a generator object. The generator object can be used with the with statement to ensure that the resource is properly handled. The value returned by the yield statement is used as the resource that will be managed. Here is an example:

    from contextlib import contextmanager
    
    @contextmanager
    def my_context_manager():
        # set up the resource
        resource = ...
        try:
            yield resource
        finally:
            # clean up the resource
            pass
    
    with my_context_manager() as resource:
        # use the resource

In this example, my_context_manager is a context manager generator function that sets up and cleans up a resource. The @contextmanager decorator is used to create a context manager object from the generator function. When the code block is entered, the resource is set up and the yield statement is used to return it. When the code block is exited, the finally block is used to clean up the resource.

In summary, a context manager in Python is a Python object that manages resources used by a code block. It can be created using a class or a generator. When used with the with statement, a context manager ensures that resources are properly set up and cleaned up, even if an error occurs.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Python interview — then scores it.
📞 Practice Python — free 15 min
📕 Buy this interview preparation book: 100 Python questions & answers — PDF + EPUB for $5

All 100 Python questions · All topics