2014-04-27 47 views
0

我想爲從bgImages創建的每個實例分配一個單獨的函數,以便在調用instance.collisiontext時調用該函數。我覺得我做錯了什麼。如果您在構建中向下看,您可以看到我創建實例並將函數分配給collidetext的示例。如何正確地將函數傳遞給Python中的另一個函數

collisiontext方法的全部意義在於調用分配給collidetext的函數(這對每個實例來說都是不同的函數)。

我在這裏做錯了什麼?

此外,當給實例貧民區分配函數時,是否需要在'semumnotice'之後保留'()'?

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

What am I doing wrong here?

不少。這將是更容易,如果我只需要修正它,你找出我做了後:

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() 

Also, when assigning a function to the instance slum, do I need to keep the '()' after 'slumnotice'?

這將取決於你是否要使用slumnotice本身或slumnotice()返回值。

+0

我不完全確定你用kwargs ['collidetext']做了什麼 – david

+0

這是一本字典。我訪問並改變了它。 –

+0

爲什麼?無論如何,這給了我錯誤,'KeyError:'collidetext'' – david

相關問題