Как создать метод класса, который будет самостоятельно вызываться при завершении программы
В созданном классе, необходимо создать аналог блока finally, который будет выполнять некоторые команды (spi.close() и GPIO.cleanup()) в конце работы программы, вне зависимости по какой причине программа завершилась (ошибка или нормальное завершение программы). Можно ли осуществить такой функционал в теле класса?
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
- Можно зарегистрировать метод с помощью модуля
atexit:
import atexit
class Someclass:
def __init__(self):
...
atexit.register(self.at_exit)
def at_exit(self):
spi.close()
GPIO.cleanup()
- Можно создать менеджер контекста, который при входе в блок
withбудет делать какую-то подготовку, при выходе - всякую очистку (вынести подготовку/завершение из класса):
import contextlib
@contextlib.contextmanager
def prepare_interfaces():
... # Тут вставить подготовку GPIO и SPI, если она требуется
try:
yield # Передаем управление внутрь блока with
finally:
# При ошибке или корректном выходе из блока with "деинициализируем" интерфейсы
spi.close()
GPIO.cleanup()
with prepare_interfaces():
do_something()
Также как вариант можно сам класс сделать менеджером контекста, для этого нужно реализовать методы __enter__ (то что должно выполниться до входа в блок with) и __exit__ (то что выполнится при выходе из блока).