Ver la información del ejemplo sencillo:¿Cómo distingue Python la función de devolución de llamada que es miembro de una clase?
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()
El resultado es:
1
2
Se ejecuta como se esperaba. Pero tengo una pregunta. En C, la función de devolución de llamada se pasa como un puntero. En Python, debe tener una forma similar de hacer esto, para que la persona que llama conozca la dirección de la función. Pero en mi ejemplo, no solo se pasa el puntero a la función, sino también el parámetro (auto), porque el mismo método de la misma clase imprime resultados diferentes. Entonces mis preguntas son:
¿Existe tal método en Python que solo tenga una copia en la memoria? Mi significado es que el código de cualquier método solo tiene una copia, y en mi ejemplo, el método no se clonará. Creo que debería tener solo una copia, pero aquí todavía hago esta pregunta para obtener más entradas.
Recuerdo que todo en Python es un objeto. Entonces en mi ejemplo, ¿hay dos instancias de función con diferentes parámetros pero solo una copia de código?
Creo que crea un cierre? –
Deberías estar usando clases newstyle. Subclase todo desde 'objeto 'o algo que lo subclasifique. – aaronasterling
@aaronasterling: ¿Aunque no estoy seguro de que tenga demasiado impacto en la pregunta en cuestión? – jdi