如何在Python中正确地将函数传递给另一个函数

时间:2014-04-27 06:21:58

标签: python

我正在尝试为从bgImages创建的每个实例分配一个单独的函数,这样当我调用instance.collisiontext时,它会调用该函数。我觉得我做错了什么。如果您向下查看构建,可以看到我创建实例的位置示例并将函数分配给collidetext

collisiontext方法的重点是调用分配给collidetext的函数(对于每个实例,它将是一个不同的函数)。

我在这里做错了什么?

此外,在为实例贫民窟分配功能时,我是否需要在'slumnotice'之后保留'()'?

class BgImages(ButtonBehavior, Image):
    def __init__(self, **kwargs):
        super(Npcs, self).__init__(**kwargs)
        self.collidetext=''

    def collisiontext(self,**kwargs):
        global collidetext
        return collidetext()

class MainCharacter(Image):

    def __init__(self, **kwargs):
        super(MainCharacter, self).__init__(**kwargs)
        self._keyboard = Window.request_keyboard(None, self)
        if not self._keyboard:
            return
        self._keyboard.bind(on_key_down=self.on_keyboard_down)
        self._keyboard.bind(on_key_up=self.on_keyboard_up)

    elif keycode[1] == 'up':
            for i in listofwidgets:
                if i.collide_point(self.x,self.top):
                    self.y -=1
                    i.collisiontext()

class gameApp(App):
    def build(self):
        slum=BgImages(source='slum.png', collidetext=slumnotice())
        listofwidgets=[]
        listofwidgets.append(slum)

1 个答案:

答案 0 :(得分:1)

  

我在这里做错了什么?

相当多。如果我只是纠正它并且你弄明白我之后做了什么会更容易:

class BgImages(ButtonBehavior, Image):
    def __init__(self, **kwargs):
        self.collidetext = kwargs['collidetext']
        del kwargs['collidetext']
        super(BgImages, self).__init__(**kwargs)

    def collisiontext(self):
        return self.collidetext()
  

此外,在为实例贫民窟分配功能时,我是否需要在'slumnotice'之后保留'()'?

这取决于您是想要使用slumnotice本身还是slumnotice()的返回值。