Я читал о различных способах очистки объектов в Python, и я наткнулся на эти вопросы (1, 2), которые в основном говорят, что очистка с использованием __del__()
ненадежно и следующий код следует избегать:Является ли полагаться на __del __() для очистки в python ненадежной?
def __init__(self):
rc.open()
def __del__(self):
rc.close()
Проблема в том, что я использую именно этот код, и я не могу воспроизвести ни одну из проблем, упомянутых в вышеприведенных вопросах. Что касается моих знаний, я не могу пойти на альтернативу с помощью инструкции with
, так как я предоставляю модуль Python для программного обеспечения с закрытым исходным кодом (testIDEA, кто-нибудь?). Это программное обеспечение создаст экземпляры определенных классов и избавит их, эти экземпляры должны быть готовы предоставлять услуги между ними. Единственная альтернатива __del__()
, которую я вижу, - это вручную вызвать open()
и close()
по мере необходимости, что, я полагаю, будет довольно подверженным ошибкам.
Я понимаю, что когда я закрою интерпретатор, нет гарантии, что мои объекты будут уничтожены правильно (и это меня не сильно беспокоит, черт возьми, даже авторы Python решили, что все в порядке). Кроме того, я играю с огнем, используя __del__()
для очистки?
PS: Я изначально думал о размещении наброска на мета вопросов о ошибках, которые невозможно воспроизвести, но понял, что я не получу технических деталей, которые мне нужны именно так.
Выполняется ли '__exit__' даже при закрытии интерпретатора ...? –
Также: я нашел [эту ссылку] (http://eli.thegreenplace.net/2009/06/12/safely-using-destructors-in-python), чтобы быть очень полезной по этому вопросу. –
@RickTeachey вы ошиблись '__del__' за' __exit__', или вы предлагаете мне использовать '__exit__' в моем коде? Кроме того, я могу терпеть проблемы при закрытии. –