Я планирую реализовать C ++ - подобные функции конструктора / деструктора для одного из моих классов Python, используя удобный с ] утверждение. До сих пор я встречал это утверждение только для файлового ввода-вывода, но я подумал, что это будет весьма полезно и для задач связи на основе соединений, скажем, сокетов или соединений с базой данных . Вещи, которые со временем нужно закрыть.
В PEP 343 (ссылка приведена выше) сказано, что с
нужны методы __ enter __
и __ exit __
, и моя прямолинейная реализация этого появляется работать по назначению.
class MyConnection:
def __init__(self):
pass
def __enter__(self):
print "constructor"
# TODO: open connections and stuff
# make the connection available in the with-block
return self
def __exit__(self, *args):
print "destructor"
# TODO: close connections and stuff
with MyConnection() as c:
# TODO: do something with c
pass
Что дает результат (как и ожидалось):
constructor
destructor
Должно ли это быть так просто? Что нужно учитывать помимо этого? Почему так много библиотек (по всей видимости) еще не имеют этой функциональности? Я что-то пропустил?