python中的函数绑定是什么?

git*_*tha 2 python kivy

我试图理解 python 中的 kivy 库。下面是完整的代码。

import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button

class MyGrid(GridLayout):
    def __init__(self, **kwargs):
        super(MyGrid, self).__init__(**kwargs)
        self.cols = 1

        self.inside = GridLayout()
        self.inside.cols = 2

        self.inside.name = TextInput(multiline=False)
        self.inside.add_widget(self.inside.name)
        self.inside.add_widget(Label(text="Name: "))

        self.inside.name = TextInput(multiline=False)
        self.inside.add_widget(self.inside.name)
        self.inside.add_widget(Label(text="Email: "))

        self.inside.name = TextInput(multiline=False)
        self.inside.add_widget(self.inside.name)
        self.inside.add_widget(Label(text="Phno: "))

        self.add_widget(self.inside)

        self.submit = Button(text="Submit", font_size=40)
        self.submit.bind(on_press=self.pressed)
        self.add_widget(self.submit)        

    def pressed(self, instance):
        print("pressed")



class MyApp(App):
    def build(self):
        return MyGrid()


if __name__ == "__main__":
    MyApp().run()

Run Code Online (Sandbox Code Playgroud)

在这里,在MyGrid课堂上,在 init 方法下,当我尝试将提交按钮(self.submit.bind)与该pressed方法绑定时,带有 on_press 的参数不包含括号。

self.submit.bind(on_press=self.pressed)
Run Code Online (Sandbox Code Playgroud)

为什么有效?是因为 Python 约定在将括号传递给方法时不包含括号吗?

而pressed方法中的instance参数又有什么用呢?

Cor*_*mer 5

如果不带括号传递函数,则传递的是函数对象本身

self.submit.bind(on_press=self.pressed)
Run Code Online (Sandbox Code Playgroud)

这通常用于回调机制等。如果添加括号,self.pressed()将在该语句中立即调用,而不是on_press保存该函数以供稍后调用,以响应按钮单击。