Python字典没有像我希望的那样返回新值
很明显我做错了什么。我是一个新的python/noob编码器,所以这对你们中的许多人来说可能是显而易见的,但我不知道该怎么做Python字典没有像我希望的那样返回新值,python,dictionary,self,Python,Dictionary,Self,很明显我做错了什么。我是一个新的python/noob编码器,所以这对你们中的许多人来说可能是显而易见的,但我不知道该怎么做 class hero(): """Lets do some heros shit""" def __init__(self, name="Jimmy", prof="Warrior", weapon="Sword"): """Constructor for hero""" self.name = name
class hero():
"""Lets do some heros shit"""
def __init__(self, name="Jimmy", prof="Warrior", weapon="Sword"):
"""Constructor for hero"""
self.name = name
self.prof = prof
self.weapon = weapon
self.herodict = {
"Name": self.name,
"Class": self.prof,
"Weapon": self.weapon
}
self.herotext = {
"Welcome": "Greetings, hero. What is thine name? ",
"AskClass": "A fine name %s. What is your class? " % self.herodict['Name'],
}
def thingy(self, textkey, herokey):
n = raw_input(self.herotext[textkey])
self.herodict[herokey] = n
if self.herodict[herokey] != "":
print self.herodict[herokey]
else:
self.herodict[herokey] = self.name
print self.herodict[herokey]
def setHeroName(self):
self.thingy("Welcome", 'Name')
def setHeroClass(self):
self.thingy("AskClass", 'Class')
所以基本上你运行它,它设置了一系列默认值。它将询问一个名称,您为其提供用户输入,它将名称键设置为您输入的新值。他们假设使用新的键:value或name:(userinput)并在下一个小句子中使用它。但它会返回并使用默认值“jimmy”
我需要做什么?线路:
"AskClass": "A fine name %s. What is your class? " % self.herodict['Name'],
在创建类时执行,而不是在以后打印时执行。创建类时,self.herodict['Name']
设置为'Jimmy'
稍后,当你有一个名字时,你必须做插值。也许您需要改用可调用项,比如lambda
对象:
self.herotext = {
"Welcome": lambda self: "Greetings, hero. What is thine name? ",
"AskClass": lambda self: "A fine name %s. What is your class? " % self.herodict['Name'],
}
然后,稍后调用他们传入self
:
n = raw_input(self.herotext[textkey](self))
我明白你的意思,我创建了这个类,而不是在打印时。但后来我看了看,有一个问题:就在
n=raw_input(self.herotext[textkey])self.herodict[herokey]=n
行之后,我有一行写着print self.herodict[herokey]
,它会打印正确的新用户输入名(不是“吉米”)。这是因为它在同一个def中吗?似乎他们正在访问两个不同的目录;一个是最近的,一个是从对象首次初始化时开始的。herotext
字典是在\uuuu init\uuuu
中创建的,因此在创建实例时也是如此。然而,n
局部变量是在thingy
方法运行时设置的。在同样的方法中,你将self.herodict[herokey]设置为n
,这样当你打印self.herodict[herokey]时,它仍然有n
的值,这是用户在你要求原始输入()时刚刚输入的值。我想我现在理解得更好了。试着在我的脑海里想象它<代码>类初始化->默认名称集->setHeroName()->thingy(newname)->本地名称已设置->本地名称已打印->setheroaclass()如果在开始时已初始化,则会看到原始dict默认值,因为它是在更改之前创建的
?我想我应该开始使用文件来存储这些东西,然后再读回。或者进入lambda,因为我以前从未使用过。谢谢你的耐心和投入,我很感激!