2009-10-15 2 views
0

Мне нужно упредить __del__, и я хочу знать, как правильно это сделать. В основном мой вопрос в коде это то, что ..Предотвращение __del__ hmmm

class A: 
    def __init__(self): 
     self.log = logging.getLogger() 
     self.log.debug("In init") 
     self.closed = False 

    def close(self): 
     self.log.debug("Doing some magic") 
     self.closed = True 

    def __del__(self): 
     if not self.closed: 
      self.close() 
     self.log.debug("In closing") 

     # What should go here to properly do GC?? 

Есть ли какой-либо способ теперь назвать стандартные функции GC?

Спасибо за чтение !!

Стив

+0

Упрется? Зачем? Чего вы на самом деле пытаетесь достичь? –

ответ

4

__del__ не является истинным деструктор. Он вызывается до уничтожения объекта, чтобы освободить любые ресурсы, которые он удерживает. Не нужно беспокоиться о том, чтобы освободить память.

Вы также можете вызывать родительский класс '__del__, если вы наследуете класс, который также может иметь открытые ресурсы.

1

Если вы хотите позвонить GC вручную, то вызовите gc.collect().

3

Для этого используйте инструкцию with.

См http://docs.python.org/reference/compound_stmts.html#the-with-statement

с гарантиями заявление, что если ввести() метод возвращает без ошибку, то выход() всегда будет называться.

Вместо того, чтобы дурачиться с __del__, используйте __exit__ объекта контекста менеджера.

+1

Не могли бы вы быть более конкретными - спасибо! – rh0dium

+0

@ rh0dium: Вы читали о заявлении с и менеджере контекста? Какие у вас были вопросы? –

+0

Используйте только оператор with, если вы знаете, что ваш код не будет использоваться с версиями Python до 2.5, когда он будет введен. –

Смежные вопросы