Почитайте про контекстные менеджеры. Что это, как с этим работать.
В качестве песочницы можете начать с такого кода:
class func:
def __init__(self):
self.condition = 'вне контекста'
# функция описывает методы, вызываемые при старте контекстного менеджера
# Возвращаемое значение уходит в переменную var в конструкции 'with ... as var:'
def __enter__(self):
self.condition = 'в контексте'
return self
# Метод вызываемый в завершении конструкции with или при ошибке после нее
def __exit__(self, type, value, traceback):
pass
def __call__(self):
print(f'Выполнение функции {self.condition}')
out_context = func()
out_context()
print('-'*40)
with func() as inside_context:
inside_context()
Результат будет следующий:
Выполнение функции вне контекста
----------------------------------------
Выполнение функции в контексте