Python 为什么我的实例行为不正确?
为什么我可以设置高度,但不能在实例化期间将函数传递给Python 为什么我的实例行为不正确?,python,Python,为什么我可以设置高度,但不能在实例化期间将函数传递给collide text 如果我选中slim.height,它就是10(因为当slim被实例化时,我将它设置为10),但是如果我调用slim.collisiontext,它只调用somefunction,而不是在创建实例时我分配给slim的函数 我不明白 class BgImages(ButtonBehavior, Image): def __init__(self, **kwargs): super(Npcs, sel
collide text
如果我选中slim.height
,它就是10
(因为当slim
被实例化时,我将它设置为10
),但是如果我调用slim.collisiontext
,它只调用somefunction
,而不是在创建实例时我分配给slim
的函数
我不明白
class BgImages(ButtonBehavior, Image):
def __init__(self, **kwargs):
super(Npcs, self).__init__(**kwargs)
self.collidetext=somefunction
self.height=0
def collisiontext(self,**kwargs):
return self.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, height=10)
police=BgImages(source='police.png', collidetext=policenotice)
listofwidgets=[]
listofwidgets.append(slum)
listofwidgets.append(police)
你应该把你在_init__中的作业改为 **kwargs函数定义中的构造允许您向函数发送任何一组命名参数-在函数中,它们将作为字典显示
In [64]: def test(**kwargs):
....: print locals()
....:
In [66]: test(advice='learn')
{'kwargs': {'advice': 'learn'}}
另一种方法是在kwargs之前的_uinit _uuu声明中显式定义位置函数参数
def __init__(self, collide_func, **kwargs):
super(Npcs, self).__init__(**kwargs)
self.collidetext=collide_func
self.height=0
如果您不打算使用关键字参数,或者只需要位置参数,则根本不需要添加构造(在\uuuu init\uuuu中,您需要**kwargs来传递给父类)您注意到在collisiontext方法中没有使用kwargs吗?这些是作为kwargs值之一传递的函数。不尝试“用dict键做任何事情”正是你的错误。有什么东西可以替换“kwargs”以便传递函数引用吗?elif-keycode[1]=“up”:部分是什么?它在语法上不正确。即使您将
if
和elif
放在同一级别,您的代码也没有多大意义,因为您会有一个返回
,它会阻止某些代码的执行。
def __init__(self, collide_func, **kwargs):
super(Npcs, self).__init__(**kwargs)
self.collidetext=collide_func
self.height=0