Ищете метод для вызова метода экземпляра класса без ссылки на объект

#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 действует как метод, и я могу передавать его как обратный вызов. Правильно?