gpt4 book ai didi

python - 在 Python 中实现回调 - 将可调用引用传递给当前函数

转载 作者:IT老高 更新时间:2023-10-28 21:57:37 27 4
gpt4 key购买 nike

我想在 Python 中为几个 worker 实现 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)

来源:Here

据我了解,为了 subscribe,我需要将回调传递给将在 fire 上调用的函数。如果调用函数是 class 方法,大概我可以使用 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>>)

关于python - 在 Python 中实现回调 - 将可调用引用传递给当前函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4689984/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com