Класс-оболочка для файла - правильный способ закрыть дескриптор файла, когда на него больше не ссылаются

У меня есть класс, который включает в себя некоторые функции обработки файлов, которые мне нужны. Другой класс создает экземпляр обработчика файлов и использует его неопределенное время. В конце концов, вызывающий уничтожается, что уничтожает единственную ссылку на обработчик файлов .

Как лучше всего обработчик файлов закрыть файл?

В настоящее время я использую __ del __ (self) , но после просмотра нескольких разных вопросов и статей , у меня сложилось впечатление, что это считается плохим .

class fileHandler:
    def __init__(self, dbf):
        self.logger = logging.getLogger('fileHandler')
        self.thefile = open(dbf, 'rb')
    def __del__(self):
        self.thefile.close()

Это соответствующий бит обработчика. Вся суть класса состоит в том, чтобы абстрагироваться от деталей работы с базовым файловым объектом, а также избегать излишнего чтения всего файла в память. Однако часть обработки базового файла заключается в его закрытии, когда объект выпадает из области видимости.

Предполагается, что вызывающий вызывающий не должен знать или заботиться о деталях, связанных с обработчиком файлов . Работа обработчика файлов состоит в том, чтобы высвободить все необходимые ресурсы, задействованные, когда они выпадают из области видимости. Это одна из причин, по которой он вообще был абстрагирован.Итак, мне кажется, что я столкнулся с проблемой перемещения кода обработчика файлов в вызывающий объект или работы с дырявой абстракцией.

Мысли?

10
задан Community 23 May 2017 в 11:46
поделиться