Пожалуйста, посмотрите на простой пример:
class A:
def __init__(self, flag):
self.flag = flag
def func(self):
print self.flag
a = A(1)
b = A(2)
callback_a = a.func
callback_b = b.func
callback_a()
callback_b()
Результат:
1
2
Он работает как ожидалось. Но у меня есть вопрос. В C функция обратного вызова передается как указатель. В Python он должен иметь аналогичный способ сделать это, поэтому вызывающий абонент знает адрес функции. Но в моем примере передается не только указатель функции, но и передается параметр (self), потому что тот же метод одного и того же класса печатает разные результаты. Поэтому мои вопросы:
-
Имеет ли такой метод в Python только один экземпляр в памяти? Я имею в виду, что код любого метода имеет только одну копию, и в моем примере метод не будет клонирован сам. Я думаю, что он должен иметь только одну копию, но здесь я все еще делаю этот вопрос, чтобы получить больше ресурсов.
-
Я помню, что все в Python является объектом. Итак, в моем примере есть два экземпляра функции с разными параметрами, но только одна копия кода?