Python:使用带有OOP的

时间:2017-08-03 13:42:28

标签: python python-2.7 jython

我正在尝试为基于Eclipse的工具构建一些UI面板。该工具的API具有基于装饰器的事件处理机制,例如,以下callbackOpena_panel_object的开头绑定:

@panelOpenHandler(a_panel_object)
def callbackOpen(event):
    print "opening HERE!!"

这样可以正常工作,但我希望将所有事件处理程序和实际数据处理包装在类后面的面板中。理想情况下,我想做一些事情:

class Test(object):
    def __init__(self):
        # initialise some data here

    @panelOpenHandler(a_panel_object)
    def callbackOpen(self, event):
        print "opening HERE!!"

但这不起作用,我想可能是因为我给它一个同时接受selfevent的回调,当装饰者只提供event时在内部调用该函数(注意:我无法访问panelOpenHandler上的源代码,并且文档记录不完善......而且,Eclipse / jython某处的任何错误消息都被吞没了。

有没有什么方法可以使用库装饰器为一个函数提供一个参数,该函数在一个带有多个参数的函数上?我可以以某种方式使用lambdas绑定self参数并将其隐含吗?

我已尝试合并方法herehere的一些变体,但我不认为它是完全相同的问题。

1 个答案:

答案 0 :(得分:0)

你的装饰者显然注册了一个稍后要调用的函数。因此,它完全不适合在类方法上使用,因为它不知道要调用该方法的类的哪个实例。

您能够执行此操作的唯一方法是从特定的类实例手动注册绑定方法 - 这不能使用装饰器语法完成。例如,将它放在您的类定义之后的某处:

panelOpenHandler(context.controls.PerformanceTuneDemoPanel)(Test().callbackOpen)