Пожалуйста, посмотрите на простой пример:
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 является объектом. Итак, в моем примере есть два экземпляра функции с разными параметрами, но только одна копия кода?