在Python中实现回调-将可调用引用传递给当前函数
我想用Python为几个工作人员实现在Python中实现回调-将可调用引用传递给当前函数,python,design-patterns,functional-programming,callback,observer-pattern,Python,Design Patterns,Functional Programming,Callback,Observer Pattern,我想用Python为几个工作人员实现Observable模式,并遇到了以下有用的片段: class Event(object): pass class Observable(object): def __init__(self): self.callbacks = [] def subscribe(self, callback): self.callbacks.append(callback) def fire(self, **a
Observable
模式,并遇到了以下有用的片段:
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)
资料来源:
据我所知,为了
订阅
,我需要将回调传递给将在fire
上调用的函数。如果调用函数是一个类
方法,我可能会使用self
,但是如果没有这个方法,我怎么能直接得到一个对self.callbacks.append(callback)
位有用的回调呢?任何定义的函数都可以通过简单地使用它的名称来传递,而不用添加()
在调用它的末尾:
def my_callback_func(event):
# do stuff
o = Observable()
o.subscribe(my_callback_func)
其他示例用法:
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>>)
类回调处理程序(对象):
@静力学方法
def静态_处理程序(事件):
#做事
def实例_处理程序(自身、事件):
#做事
o=可观察()
#静态方法引用为。
o、 订阅(CallbackHandler.static\u处理程序)
c=CallbackHandler()
#实例方法是。
o、 订阅(c.instance\u处理程序)
#您甚至可以传递lambda函数
o、 订阅(lambda事件:)
方法中缺少self
参数。哎哟。在实例方法中忘记了它。静态方法没有得到一个self
。太好了,非常感谢-事实上我一直在努力解决静态:)@Amber,你如何从可观察方法调用回调?假设Observable将方法存储在“callback”变量中-调用的语法是什么?