Как Python различает функцию обратного вызова, которая является членом класса?

Пожалуйста, посмотрите на простой пример:

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), потому что один и тот же метод одного и того же класса выводит разные результаты. Итак, мои вопросы:

  1. Имеет ли такой метод в Python только одну копию в памяти? Я имею в виду, что код любого метода имеет только одну копию, и в моем примере сам метод не будет клонирован. Я думаю, что он должен иметь только одну копию, но здесь я все же задаю этот вопрос, чтобы получить больше входных данных.

  2. Я помню, что все в Python является объектом. Итак, в моем примере есть два экземпляра функции с разными параметрами, но только одна копия кода?

27
задан flypen 4 April 2012 в 01:31
поделиться