我还在学习Python,我对创建新实例感到有些困惑。在这个例子的底部,我正在创建一个BgImages的实例。我想给它分配一个字符串,所以我添加了collidetext =“这是一个测试”,然后我进入了BgImages构造函数,只需输入self.collidetext =“random string”。问题是当我打印slum.collisiontext时,它仍会打印“随机字符串”而不是“这是一个测试”。
我已经向其他人请求了这方面的帮助,我现在明白它与** kwargs有关,不会允许我想要做的事情。我希望有人能告诉我如何实现我想要实现的目标,以及为什么我所做的事情不起作用(用非专业人士的说法)。
class BgImages(ButtonBehavior, Image):
def __init__(self, **kwargs):
super(Npcs, self).__init__(**kwargs)
self.collidetext="random string"
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)
class gameApp(App):
def build(self):
slum=BgImages(source='slum.png', collidetext="this is a test1")
police=BgImages(source='police.png', collidetext="this is a test2")
listofwidgets=[]
listofwidgets.append(slum)
listofwidgets.append(police)
答案 0 :(得分:0)
我认为您可能会在使用kwargs
时稍微混淆这个问题。但无论如何,要在当前代码中执行您想要的操作,您可以执行以下操作:
def __init__(self, **kwargs):
super(Npcs, self).__init__(**kwargs)
self.collidetext=kwargs["collidetext"]
但是,通常你会使用实际的命名参数,可能是这样的:
def __init__(self, source=None, collidetext=None):
super(Npcs, self).__init__(source=source)
self.collidetext=collidetext
此外,您对def collisiontext(self,**kwargs):
的使用表明您不确定kwargs
是什么,而您只是重复该模式。我建议您在进一步学习之前花些时间学习一篇优秀的Python教程。
答案 1 :(得分:0)
您正在传递所需的关键字参数,但您没有在目标类中使用它们。
class BgImages(ButtonBehavior, Image):
def __init__(self, **kwargs):
super(Npcs, self).__init__(**kwargs)
# do a dictionary lookup to get a random string if the argument is not passed
self.collidetext= kwargs.get("collidetext","random string")