#python #python-3.x
Вопрос:
Библиотека модулей, с которой я работаю, может вызывать функции обратного вызова. Мне нравится получать обратный вызов в экземпляре класса.
Я придумал следующий обходной путь, чтобы, когда я вызываю обратный вызов, он вызывал метод объекта.
import gc import random class CallbackProofOfConcept: def __init__(self): self.state_variable = random.randint(0, 9) def class_methos(self, some_data): print(self.state_variable, some_data) def get_callback(self): def callback(some_data): self.class_methos(some_data) return callback c1 = CallbackProofOfConcept() c2 = CallbackProofOfConcept() f1 = c1.get_callback() f2 = c2.get_callback() for i in range(100): print(i, "calling fx", end=' ') f1("f1_data") print(i, "calling fy", end=' ') f2("f2_data") gc.
Является ли это правильным/безопасным способом реализации того, что мне нужно?
Является ли функция callback
внутри функции класса get_callback
аналогичной концепции закрытия в Javascript?
Комментарии:
1. Вы могли бы просто использовать
c1.class_methos
. В этом нет необходимостиget_callback
. (Это не похоже на Javascript, где методы «забывают»this
, когда вы это делаете.)2. @user2357112supportsMonica, это сработало. Большое спасибо!! Таким образом, c1.class_methos действует как метод, и я могу передавать его как обратный вызов. Правильно?