Regardez cet exemple simple :
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()
Le résultat est :
1
2
Il fonctionne comme prévu. Mais j'ai une question. En C, la fonction de rappel est passée comme un pointeur. En Python, il devrait y avoir un moyen similaire de le faire, de sorte que l'appelant connaisse l'adresse de la fonction. Mais dans mon exemple, ce n'est pas seulement le pointeur de fonction qui est passé, mais aussi le paramètre (self), car la même méthode de la même classe donne des résultats différents. Mes questions sont donc les suivantes :
-
Est-ce qu'une telle méthode en Python n'a qu'une seule copie en mémoire ? Je veux dire que le code d'une méthode n'a qu'une seule copie, et dans mon exemple la méthode ne sera pas clonée elle-même. Je pense qu'elle ne devrait avoir qu'une seule copie, mais je pose quand même cette question afin d'obtenir plus d'informations.
-
Je me souviens que tout en Python est un objet. Donc dans mon exemple, y a-t-il deux instances de fonction avec des paramètres différents mais une seule copie du code ?