[关闭]
@hpp157 2016-08-14T08:29:17.000000Z 字数 736 阅读 1725

Why you will care:Bound Method callbacks

为什么你需要注意:绑定方法的回调

python


由于绑定方法(bound methods)自动的把实例和类方法(class's methods)打包在一起,你可以在任何地方像使用简单函数一样使用它,最常见的使用,就是把方法注册成tkinter GUI接口中事件回调处理器的代码。下面是一个简单的例子。

def handler():
    ....use globals for state..

widget = Button(text='spam',command=handler)

要为按钮点击事件注册一个handle时,通常是将一个不带参数的可调用的对象(callable object)传递给command关键词参数 。函数名(以及一个匿名函数lambdas)都可以使用,而类一级的方法(class-level methods)只要是绑定方法也可以使用:

class MyGui:
    def handler(self):
        ...use self.arrt for state..
    def makewidgets(self):
        b = Button(text='spam',command=self.handler)

在这里,事件处理器是self.handler(一个绑定方法对象),它记住self和MyGui.handler。因为handler稍后因事件而启用时,self会引用原始实例(origin instance),这个方法和类一级(class-level)的方法一样能访问到在事件之间(between events)可以保留状态信息( retain state)的实例属性(instance attributes)。如果利用简单函数,状态信息一般都必须通过全局变量保存。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注