Verwendung von Kontextmanagern für Instanzvariablen

8

Wie würde ich einen Contextmanager für Instanzvariablen verwenden? Z.B. Nehmen wir an, ich habe eine Connection -Klasse, die bei der Zerstörung geschlossen werden muss. Wenn ich es als ContextManager implementieren würde, könnte ich tun.

%Vor%

und es würde automatisch wegen Zerstörung geschlossen. Aber was, wenn ich es in __init__ einer anderen Klasse verwenden wollte, z.B. wie das folgende Beispiel?

%Vor%

Ich möchte nicht, dass es beim Beenden des Konstruktors geschlossen wird, es sollte sterben, wenn das Objekt zerstört wird. Ich könnte __del__ verwenden, aber das hat Nachteile. Wenn ich an RAII in C ++ gewöhnt bin, verblüfft es mich.

Was ist der beste Weg, dies in diesem Fall zu tun?

    
P3trus 06.01.2013, 15:50
quelle

2 Antworten

6

Sie sollten self.connection.close in Ihrer Device.close() -Methode aufrufen und dann dafür sorgen, dass das in Ihrem Programm richtig aufgerufen wird, vielleicht mit einem Kontextmanager.

__del__ ist es nie wert.

    
Ned Batchelder 06.01.2013, 16:02
quelle
1
%Vor%     
TomDotTom 30.07.2015 00:49
quelle