Aangepaste Contextmanagers Maken
Veeg om het menu te tonen
Om volledig gebruik te maken van de kracht van contextmanagers in Python, kun je je eigen contextmanager maken door een klasse te definiëren die de methoden __enter__ en __exit__ implementeert. De methode __enter__ wordt aangeroepen wanneer de uitvoering het contextblok van de with-instructie binnengaat, en de returnwaarde wordt toegewezen aan de variabele na as. De methode __exit__ wordt aangeroepen wanneer de uitvoering het contextblok verlaat, ongeacht of dit normaal gebeurt of door een uitzondering. Dit ontwerp maakt het mogelijk om resources veilig en voorspelbaar op te zetten en af te breken, wat vooral nuttig is bij het beheren van bestanden, netwerkverbindingen of locks.
De methode __exit__ ontvangt drie argumenten: exc_type, exc_value en traceback. Deze geven details over eventuele uitzonderingen die zich binnen het contextblok voordoen. Als __exit__ True retourneert, wordt de uitzondering onderdrukt; anders zal de uitzondering na de opruiming worden doorgegeven. Door deze methoden te implementeren, kun je precies bepalen hoe het opzetten en opruimen van je resource verloopt, waardoor je code robuuster en beter onderhoudbaar wordt.
class FileLogger:
def __init__(self, filename, logname):
self.filename = filename
self.logname = logname
self.file = None
self.log = None
def __enter__(self):
self.file = open(self.filename, "r")
self.log = open(self.logname, "a")
self.log.write(f"Opened file: {self.filename}\n")
return self.file
def __exit__(self, exc_type, exc_value, traceback):
if self.file:
self.file.close()
self.log.write(f"Closed file: {self.filename}\n")
if self.log:
self.log.close()
# Do not suppress exceptions
return False
De volgende code demonstreert een aangepaste contextmanagerklasse FileLogger. Deze klasse is ontworpen om een doelbestand te openen voor lezen en een logbestand voor het toevoegen van logregels. Bij het betreden van de context (met de with-instructie) wordt het openen van het bestand gelogd. Bij het verlaten van de context – zowel bij normale uitvoering als bij een uitzondering – wordt het sluiten van het bestand gelogd en wordt ervoor gezorgd dat beide bestanden correct worden gesloten. De methode __exit__ onderdrukt geen uitzonderingen, zodat deze na de opruiming worden doorgegeven.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.