Можно ли реализовать RAII с помощью Python в контексте обеспечения вызова функции close() для открытых файлов?Python

Программы на Python
Anonymous
Можно ли реализовать RAII с помощью Python в контексте обеспечения вызова функции close() для открытых файлов?

Сообщение Anonymous »

Ранее сегодня я задал вопрос: Важно ли вызывать close() для файла, открытого с помощью open(), если вызываетсяlush() после каждой операции write()?
Я задал этот вопрос, думая о потере данных, которую учитывает методlush(). Однако есть и другие причины, по которым правильный вызов close() является хорошей идеей.
  • Вызов close() разрешает ресурс (дескриптор файла), чтобы освободить его, а не полагаться на то, что это сделает ОС.
  • Также хорошим дизайном и хорошей практикой является написание кода, который возвращает вещи в исходное состояние. По крайней мере, это то, что ожидают увидеть будущие читатели кода. Так что лучше их не путать.
Мой вопрос: если мы хотим управлять файлом с помощью объекта (класса), есть ли способ реализовать поведение, подобное RAII?
В языке без 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

Вернуться в «Python»