Implementando una callback en Python – pasando una referencia llamable a la función actual

Quiero implementar el patrón Observable en Python para un par de trabajadores, y encontré este útil fragmento:

 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) 

Fuente: aquí

Como lo entiendo, para subscribe , necesitaría pasar una callback a la función que se va a activar en fire . Si la función de llamada era un método de class , probablemente podría haber usado self , pero en ausencia de esto, ¿cómo podría obtener directamente una callback que pueda ser útil para el self.callbacks.append(callback) ?

Cualquier función definida se puede pasar simplemente usando su nombre, sin agregar el () al final que usaría para invocarla:

 def my_callback_func(event): # do stuff o = Observable() o.subscribe(my_callback_func) 

Otros usos de ejemplo:

 class CallbackHandler(object): @staticmethod def static_handler(event): # do stuff def instance_handler(self, event): # do stuff o = Observable() # static methods are referenced as . o.subscribe(CallbackHandler.static_handler) c = CallbackHandler() # instance methods are . o.subscribe(c.instance_handler) # You can even pass lambda functions o.subscribe(lambda event: <>)