Мне нужно зарегистрировать функцию atexit
для использования с классом (см. Ниже пример Foo
), что, к сожалению, у меня нет прямого способа очистки с помощью вызова метода: другой код, который я не имеют контроля, звонки Foo.start()
и Foo.end()
, но иногда не вызывает Foo.end()
, если он сталкивается с ошибкой, поэтому мне нужно очистить себя.python: замыкания и классы
я мог бы использовать некоторые советы по закрытий в этом контексте:
class Foo:
def cleanup(self):
# do something here
def start(self):
def do_cleanup():
self.cleanup()
atexit.register(do_cleanup)
def end(self):
# cleanup is no longer necessary... how do we unregister?
Будет ли закрытие работы должным образом, например, в
do_cleanup
, является ли значение правильной привязки?Как я могу отменить регистрацию процедуры atexit()?
Есть ли лучший способ сделать это?
редактировать: это Python 2.6.5
Я надеюсь, что это Python 3, иначе не наследующий от 'object' дает вам один из тех страшных классов старого стиля ... – delnan
old-style? [царапины головы], пожалуйста, уточните, чтобы я мог избежать ошибок. –
классы старого стиля являются классами до того, как классы времени и типы были унифицированы, если вы не наследуете от 'object', вы получаете старый класс стиля. –