Я видел это в чьем-то коде.Что это значит?
def __enter__(self):
return self
def __exit__(self, type, value, tb):
self.stream.close()
from __future__ import with_statement#for python2.5
class a(object):
def __enter__(self):
print 'sss'
return 'sss111'
def __exit__(self ,type, value, traceback):
print 'ok'
return False
with a() as s:
print s
print s
Используя эти волшебные методы ( __ входят __
, __ выход __
) позволяет вам осуществлять объекты, которые могут использоваться легко с с
заявление.
Идея заключается в том, что он позволяет легко построить код, который нуждается в некотором 'cleandown' код выполняется (думать о нем как try-finally
блок). Дополнительные объяснения здесь .
Полезным примером может быть объект подключения к базе данных (который затем автоматически закрывает соединение, как только соответствующая инструкция 'with' выходит за пределы области действия):
class DatabaseConnection(object):
def __enter__(self):
# make a database connection and return it
...
return self.dbconn
def __exit__(self, exc_type, exc_val, exc_tb):
# make sure the dbconnection gets closed
self.dbconn.close()
...
Как объяснялось выше, используйте этот объект с оператором с
(возможно, потребуется выполнить из __ будущего __ import with_statement
в верхней части файла, если вы находитесь на Python 2,5).
with DatabaseConnection() as mydbconn:
# do stuff
PEP343 - Оператор «with» также имеет хорошую запись.