我想编写一个在事件发生后将被调用的函数,但前提是用户已经注册了该函数。
即
#Defination
def fnBookUber(objUser):
print 'Inside fbBookUber()'
#calling
def myEvent(objUser):
print 'This event has fired'
# This function will fill objUser too
fnBookUber(objUser)
#Registeration
fnRegisterRideBooking(fnBookUber)
我知道我的解释有点古怪,但我不知道如何在python中完成此操作,尽管我坚信必须有许多方法可以在python中完成此操作。另外,我认为这可以在C ++中使用function pointers和在C#中使用delegates来实现。
您可以使用Decorators
完成代码。
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
@log
def now():
print('2015-3-25')
>>> now()
call now():
2015-3-25
您也可以访问链接:https://www.python.org/dev/peps/pep-0318/以获取更多帮助。
这里是注册和呼叫事件的一种方法。
import types
#Callback
def fnBookUber(objUser):
print('Inside fbBookUber()')
class myEvent:
def __init__(self):
self.callbacks = list()
def register_callback(self, callback: types.FunctionType):
self.callbacks.append(callback)
def call(self, objUser):
print('This event has fired')
for callback in self.callbacks:
callback(objUser)
if __name__ == "__main__":
myEvent = myEvent()
#Registration
myEvent.register_callback(fnBookUber)
#Calling/Firing the event
myEvent.call()
您也可以直接传递函数,例如
def myEvent(objUser, callback):
print('This event has fired')
callback(objUser)
并将事件称为:
myEvent(objUser, fnBookUber)
这比上一个不灵活。