Python Advanced: Custom Context Managers
In Python, context managers allow for the allocation and release of resources precisely when you want. This tutorial introduces a custom context manager for handling JSON files efficiently.
Code Example
from json import load class Json: #executed before init, creates the object manually def __new__(cls, file): print("object called") inst = object.__new__(cls) return inst #class variable how_many_times_used = 0 def __init__(self, filename): self.__fn = open(filename, "rt") self.__data = load(self.__fn) Json.how_many_times_used += 1 def __enter__(self): return self.__data def __exit__(self, tipe, value, traceback): self.__fn.close() with Json("students.json") as data: print(data) print(data[0]['name']) print(Json.how_many_times_used)
Output
object called
[{'name': 'John Doe', 'age': 22, 'course': 'Computer Science'}, {'name': 'Jane Smith', 'age': 20, 'course': 'Physics'}]
John Doe
1
How It Works
This custom context manager class for JSON handling automates opening and closing files. It leverages Python's magic methods __enter__ and __exit__ to manage resources, ensuring that the file is properly closed after operations, thus avoiding file corruption or data loss.
Conclusion
Implementing a custom context manager like this not only makes your code cleaner but also safer and more efficient by handling resources automatically.