Jak używać menedżera kontekstu dla zmiennych instancji? Na przykład. Załóżmy, że mam klasę Connection
, która musi zostać zamknięta po zniszczeniu. Gdybym miał go zaimplementować jako ContextManager, mógłbym to zrobić.Jak używać kontekstMagentów dla zmiennych instancji
with Connection() as c:
c.write('FOO')
c.ask('BAR?')
i zostanie automatycznie zamknięty po zniszczeniu. Ale co jeśli chciałbym go użyć w innej klasie, np. __init__
? jak w poniższym przykładzie?
class Device(object):
def __init__(self):
self.connection = Connection() # Must be closed on destruction.
I nie ma to być zamknięte na wyjściu z konstruktora, powinien umrzeć, gdy obiekt get zniszczone. Mogę użyć __del__
, ale ma to wady. Przyzwyczajenie się do RAII w C++ mnie niepokoi.
Jaki jest najlepszy sposób w tym przypadku?
Czas niszczenia obiektów nigdy nie jest właściwym czasem na wszystko, szczególnie w przypadku zarządzania zasobami. Zapomnij, że istnieje coś takiego jak zbieranie śmieci i zakładaj, że wszystkie obiekty żyją w nieskończoność. – delnan