# File management using context managerclassFileManager():def__init__(self, filename, mode): self.filename = filename
self.mode = mode
self.file=None# The __enter__ method opens the file and returns a file objectdef__enter__(self):print('Open file: {}'.format(self.filename)) self.file=open(self.filename, self.mode)return self.file# The __exit__ method takes care of closing the file on exiting the with block def__exit__(self, etype, value, traceback):print('Close file: {}'.format(self.filename)) self.file.close()# A FileManager object is created with test.txt as the filename and "write" mode# when __init__ method is executedwith FileManager('test.txt','w')as f: f.write('First line\n') f.write('Second line\n')# The file is already closed thanks to the automatic call to the __exit__ methodprint('File closed: {}\n'.format(f.closed))with FileManager('test.txt','r')as f:for line in f:print(line.rstrip())# Output#Open file: test.txt#Close file: test.txt#File closed: True##Open file: test.txt#First line#Second line#Close file: test.txt
When creating context managers using classes, be sure to ensure that the class includes methods: __enter__() and __exit__(). The __enter__() method provides a resource to be managed, and __exit__() performs cleanup operations without returning any value. To understand the basic structure of building context managers using classes, let's look at a simple FileManager class for managing files.