Как сделать вызов функции после завершения?

Рейтинг: 1Ответов: 1Опубликовано: 22.05.2023

Как вызвать operation_1, строго после завершения operation_2?

class A:
    def operation_1(self):
        print("Выполнен по завершению operation_2")

class B:
    def operation_2():
        print("Вызов operation_1")

Да, но по факту выдает ошибку. Может можно сделать чтобы после окончания функции появлялось время завершения.

Это время обернуть в переменную и засунуть ее в schedule

missing 1 required positional argument:  func

Идея с func хорошая, но почему-то не сработала, хотя так делал, проверю попозже еще разок. Но для меня было бы идеальным получить время окончания в формате (H:M), потому что к этому времени еще хочу привязать другие задачи.

изобразил идею в коде. Но по коду ошибка, не видит переменную a .

import schedule
import time

class B:
    def task2():
        print("Вызов функции от проверки task")

class A:
    def task():
        print("Начало проверки")
        ...
        global a 
        a = time.strftime('\"%H:%M\"') #временная метка, для запуска task2 
        print(f"Проверка завершена в {a}")

def main():
    schedule.every().day.at("20:38").do(A.task)
    schedule.every().day.at(a).do(B.task2)
    while True:
        schedule.run_pending()
        time.sleep(1)

if __name__ == "__main__":
    main()

Ответы

▲ 4

Если я правильно понял:

class A:
    def operation_1(self):
        print("Выполнен по завершению operation_2")

class B:
    def operation_2(self, func):
        print("Вызов operation_1")
        func.operation_1()


a = A()
b = B()
b.operation_2(a)

Мы добавили функции operation_2 параметр func, чтобы обратится к методу класса A при ее вызове. И вызывать ее мы будет после выполнения print("Вызов operation_1") посредством обращения к методу класса A - func.operation_1()

Затем мы создали по экземпляру каждого класса и обратились к методу объекта b передав ему аргументом объект a.

На выходе получится:

Вызов operation_1
Выполнен по завершению operation_2