Я хочу иметь класс, представляющий соединение по протоколу IMAP и использовать его с with
заявление следующим образом:Закрытие соединения с `with` заявление
class IMAPConnection:
def __enter__(self):
connection = imaplib.IMAP4_SSL(IMAP_HOST)
try:
connection.login(MAIL_USERNAME, MAIL_PASS)
except imaplib.IMAP4.error:
log.error('Failed to log in')
return connection
def __exit__(self, type, value, traceback):
self.close()
with IMAPConnection() as c:
rv, data = c.list()
print(rv, data)
Естественно это не удается, так как IMAPConnections
не имеет атрибута close
. Как я могу сохранить соединение и передать его функции __exit__
, когда закончен оператор with
?
Ha, gotcha. Спасибо! – mart1n
Я добавил еще несколько объяснений в свой ответ. Надеюсь, что это полезно –