如何将函数传递给另一个函数以创建动作侦听器

时间:2014-12-31 20:41:10

标签: python pygame

我已经用Java编程了大约2年,刚开始学习Python(大约1周)和PyGame,并且一直想创建一个简单的按钮类,但我不想希望按钮的动作(按下时会发生什么)被硬编码。在Python / PyGame中执行此操作的最佳方法是什么?

我还想过在构造函数中有一个变量,当它被调用时设置为一个函数,如: def __init__(self, func)

并调用

act = action() obj = Button(act)

我认为这不会起作用,但在我测试时会全部回复你。

在Java中,它将被称为:

button = new Button("Text");
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {
       System.out.println("ACTION");
    }
}

1 个答案:

答案 0 :(得分:1)

我知道你可以将函数对象传递给另一个函数的唯一方法是传递标识符

# listener function
def listener(): 
    print('listening...')

class Button:
    def __init__(self, mouse_listener):
        mouse_listener() # you call the function inside __init__

button = Button(listener)

在Python中,您可以接收函数作为参数,因为函数实际上是对象,但它们是特殊对象,因为它们可以被调用或者它们是可调用对象,实际上您也可以显式调用他们的__call__默认函数用于调用函数:

listener.__call__()

但通常你不这样做。