У меня есть класс, который обертывает некоторые функции обработки файлов, которые мне нужны. Другой класс создает экземпляр filehandler
и использует его в течение неопределенного промежутка времени. В конце концов, caller
уничтожается, что уничтожает единственную ссылку на filehandler
.
Каков наилучший способ закрыть filehandler
файл?
В настоящее время я использую __del__(self)
, но после просмотра несколько разных questions и статьи, у меня сложилось впечатление, что это считается плохой вещью.
class fileHandler:
def __init__(self, dbf):
self.logger = logging.getLogger('fileHandler')
self.thefile = open(dbf, 'rb')
def __del__(self):
self.thefile.close()
Это соответствующий бит обработчика. Вся цель класса состоит в том, чтобы абстрагироваться от деталей работы с основным файловым объектом, а также во избежание ненужного прочтения всего файла в памяти. Тем не менее, часть обработки базового файла закрывает его, когда объект выходит из области видимости.
caller
не должен знать или заботиться о деталях, участвующих в filehandler
. Задачей filehandler
является освобождение любых необходимых ресурсов, когда они выпадают из сферы действия. Это одна из причин, по которой она была абстрагирована в первую очередь. Таким образом, мне кажется, что мы сталкиваемся с перемещением кода filehandler
в вызывающий объект или с негерметичной абстракцией.
Мысли?