Я задал этот вопрос, думая о потере данных, которую учитывает методlush(). Однако есть и другие причины, по которым правильный вызов close() является хорошей идеей.
- Вызов close() разрешает ресурс (дескриптор файла), чтобы освободить его, а не полагаться на то, что это сделает ОС.
- Также хорошим дизайном и хорошей практикой является написание кода, который возвращает вещи в исходное состояние. По крайней мере, это то, что ожидают увидеть будущие читатели кода. Так что лучше их не путать.
В языке без GC, таком как C++, это можно было бы сделать с помощью комбинации функций деструктора класса и области видимости. Деструкторы автоматически вызываются компилятором в конце области видимости.
Python не имеет такого механизма. У него есть только один способ выражения RAII — с помощью синтаксиса with (менеджеры контекста):
with open(example_filename, 'w') as ofile:
ofile.write()
Есть ли способ написать класс, который управляет ресурсом в стиле RAII в Python?
Один из возможных способов сделать это может быть передать менеджер контекста классу __init__.
class ResourceManager():
def __init__(self, file):
self._file = file
def write():
self._file.write(f'hello world\n')
self._file.flush()
with open(example_filename, 'w') as ofile:
manager = ResourceManager(ofile)
manager.write()
manager.write()
manager.write()
Подробнее здесь: https://stackoverflow.com/questions/787 ... g-that-the