【发布时间】:2016-03-11 07:40:18
【问题描述】:
我想将一个类方法绑定到对象实例,这样当方法作为回调调用时,它仍然可以访问对象实例。我正在使用事件发射器来生成和触发事件。
这是我的代码:
#!/usr/bin/env python3
from pyee import EventEmitter
class Component(object):
_emiter = EventEmitter()
def emit(self, event_type, event):
Component._emiter.emit(event_type, event)
def listen_on(event):
def listen_on_decorator(func):
print("set event")
Component._emiter.on(event, func)
def method_wrapper(*args, **kwargs):
return func(*args, **kwargs)
return method_wrapper
return listen_on_decorator
class TestComponent(Component):
@listen_on('test')
def on_test(self, event):
print("self is " + str(self))
print("FF" + str(event))
if __name__ == '__main__':
t = TestComponent()
t.emit('test', { 'a': 'dfdsf' })
如果您运行此代码,则会引发错误:
File "component.py", line 29, in <module> [0/1889]
t.emit('test', { 'a': 'dfdsf' })
File "component.py", line 8, in emit
Component._emiter.emit('test', event)
File "/Users/giuseppe/.virtualenvs/Forex/lib/python3.4/site-packages/pyee/__init__.py", line 117, in emit
f(*args, **kwargs)
File "component.py", line 14, in method_wrapper
return func(*args, **kwargs)
TypeError: on_test() missing 1 required positional argument: 'event'
这是由于调用方法on_test时缺少self引起的。
【问题讨论】:
标签: python python-3.x events callback