Python-Aufrufe __enter__
wenn die Ausführung in den Kontext der with-Anweisung eintritt und es an der Zeit ist, die Ressource zu erwerben. Wenn die Ausführung den Kontext wieder verlässt, ruft Python __exit__
um die Ressource freizugeben
Betrachten wir die Kontext-Manager und die "with"-Anweisung in Python. Context Manager ist ein einfaches "Protokoll" (oder eine Schnittstelle), das Ihr Objekt befolgen muss, damit es mit der with-Anweisung verwendet werden kann. Im Grunde müssen Sie nur Folgendes hinzufügen eingeben. y Ausgang Methoden zu einem Objekt hinzufügen, wenn es als Kontextmanager fungieren soll. Python ruft diese beiden Methoden zu den entsprechenden Zeitpunkten im Zyklus der Ressourcenverwaltung auf.
Schauen wir uns einmal an, wie dies in der Praxis aussehen würde. So könnte eine einfache Implementierung des open()-Kontextmanagers aussehen:
class ManagedFile:
def __init__(self, name):
self.name = name
def __enter__(self):
self.file = open(self.name, 'w')
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
if self.file:
self.file.close()
Unsere Klasse ManagedFile folgt dem Protokoll des Kontextmanagers und unterstützt nun die With-Anweisung.
>>> with ManagedFile('hello.txt') as f:
... f.write('hello, world!')
... f.write('bye now')`enter code here`
Python-Aufrufe eingeben. wenn die Ausführung in den Kontext der with-Anweisung eintritt und es an der Zeit ist, die Ressource zu erwerben. Wenn die Ausführung den Kontext wieder verlässt, ruft Python Ausgang um die Ressource freizugeben.
Das Schreiben eines klassenbasierten Kontextmanagers ist nicht die einzige Möglichkeit, die With-Anweisung in Python zu unterstützen. Das Dienstprogramm contextlib in der Standardbibliothek bietet einige weitere Abstraktionen, die auf dem grundlegenden Kontextmanagerprotokoll aufbauen. Dies kann Ihr Leben ein wenig einfacher machen, wenn Ihre Anwendungsfälle mit dem übereinstimmen, was von contextlib angeboten wird.