mal*_*ngi 32 python design-patterns functional-programming callback observer-pattern
我想Observable
在Python中为几个工作者实现模式,并遇到了这个有用的片段:
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)
Run Code Online (Sandbox Code Playgroud)
来源:这里
据我所知,为了这个subscribe
,我需要将回调函数传递给将被调用的函数fire
.如果调用函数是一个class
方法,大概我可以使用self
,但在没有这个的情况下 - 我怎么能直接得到一个对该self.callbacks.append(callback)
位有用的回调?
Amb*_*ber 55
任何已定义的函数都可以通过简单地使用其名称来传递,而无需添加()
用于调用它的末尾:
def my_callback_func(event):
# do stuff
o = Observable()
o.subscribe(my_callback_func)
Run Code Online (Sandbox Code Playgroud)
其他示例用法:
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>>)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
59143 次 |
最近记录: |