Como o Python distingue a função de retorno de chamada que é um membro de uma classe?
Por favor, olhe o exemplo simples:
<code>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() </code>
O resultado é:
<code>1 2 </code>
Ele é executado como esperado. Mas eu tenho uma pergunta. Em C, a função de retorno de chamada é passada como um ponteiro. No Python, ele deve ter uma maneira semelhante de fazer isso, portanto, o chamador sabe o endereço da função. Mas no meu exemplo, não apenas o ponteiro de função é passado, mas também o parâmetro (self) é passado, porque o mesmo método da mesma classe imprime resultados diferentes. Então minhas perguntas são:
Esse método no Python tem apenas uma cópia na memória? Meu significado é que o código de qualquer método tem apenas uma cópia e, no meu exemplo, o método não será clonado em si. Acho que deveria ter apenas uma cópia, mas aqui ainda faço essa pergunta para conseguir mais entradas.
Eu lembro que tudo no Python é um objeto. Então, no meu exemplo, existem duas instâncias de função com parâmetros diferentes, mas apenas uma cópia do código?