Implémenter un callback en Python-passer une référence callable à la fonction courante
je veux implémenter le modèle Observable
en Python pour un couple d'ouvriers, et je suis tombé sur cet extrait utile:
class Event(object):
pass
class Observable(object):
def __init__(self):
self.callbacks = []
def subscribe(self, callback):
self.callbacks.append(callback)
def fire(self, **attrs):
e = Event()
e.source = self
for k, v in attrs.iteritems():
setattr(e, k, v)
for fn in self.callbacks:
fn(e)
Source: Ici
si je comprends bien, pour subscribe
, je devrais passer un appel à la fonction qui va être appelée fire
. Si la fonction d'appel était une méthode class
, probablement j'aurais pu utiliser self
, mais en l'absence - comment pourrais-je obtenir directement un rappel qui peut être utile pour la self.callbacks.append(callback)
peu?
29
demandé sur
Community
2011-01-14 13:15:20
1 réponses
n'importe quelle fonction définie peut être passée en utilisant simplement son nom, sans ajouter le ()
à la fin que vous utiliseriez pour l'invoquer:
def my_callback_func(event):
# do stuff
o = Observable()
o.subscribe(my_callback_func)
autres usages d'exemple:
class CallbackHandler(object):
@staticmethod
def static_handler(event):
# do stuff
def instance_handler(self, event):
# do stuff
o = Observable()
# static methods are referenced as <class>.<method>
o.subscribe(CallbackHandler.static_handler)
c = CallbackHandler()
# instance methods are <class instance>.<method>
o.subscribe(c.instance_handler)
# You can even pass lambda functions
o.subscribe(lambda event: <<something involving event>>)
48
répondu
Amber
2011-01-14 10:41:07