Можно ли реализовать 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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