Sie können auch getrennt Erstellung eines Kontextmanagers (der __init__
Methode) und die Eingabe des Kontexts (die __enter__
Methode), um die Lesbarkeit zu erhöhen. Anstatt also diesen Code zu schreiben:
with Company(name, id) as company, Person(name, age, gender) as person, Vehicle(brand) as vehicle:
pass
können Sie diesen Code schreiben:
company = Company(name, id)
person = Person(name, age, gender)
vehicle = Vehicle(brand)
with company, person, vehicle:
pass
Beachten Sie, dass das Erstellen des Kontextmanagers außerhalb der with
Anweisung erweckt den Eindruck, dass das erzeugte Objekt auch außerhalb der Anweisung weiterverwendet werden kann. Wenn dies für Ihren Kontextmanager nicht zutrifft, kann der falsche Eindruck dem Versuch der Lesbarkeit entgegenwirken.
Le site Dokumentation sagt:
Die meisten Kontextmanager sind so geschrieben, dass sie nur einmal effektiv in einer with-Anweisung verwendet werden können. Diese Einweg-Kontextmanager müssen bei jeder Verwendung neu erstellt werden - der Versuch, sie ein zweites Mal zu verwenden, löst eine Ausnahme aus oder funktioniert nicht korrekt.
Diese allgemeine Einschränkung bedeutet, dass es im Allgemeinen ratsam ist, Kontextmanager direkt in der Kopfzeile der with-Anweisung zu erstellen, in der sie verwendet werden.