所以我有这个课程:
class hero():
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, {Name}. What is your class? ",
"AskWeapon": "A {Class}, hmm? What shalt thy weapon be? ",
}
def setHeroDicts(self, textkey, herokey):
n = raw_input(self.herotext[textkey].format(**self.herodict))
if n == "":
n = self.herodict[herokey]
self.herodict[herokey] = n
#print self.herodict[herokey]
def heroMake(self):
h = hero()
h.setHeroDicts("Welcome", "Name")
h.setHeroDicts("AskClass", "Class")
h.setHeroDicts("AskWeapon", "Weapon")
在另一个班级,我有这个执行
def Someclass(self):
h = hero()
print h.herodict["Class"]
h.heroMake()
print h.getClass()
if "Mage" in h.herodict["Class"]:
print "OMG MAGE"
elif "Warrior" in h.herodict["Class"]:
print "Warrior!"
else:
print "NONE"
因此,如果我每次都不输入任何内容,则会导致空白用户输入,并提供默认值。但是如果我输入一个输入,那么它会将herodict
值更改为我自定义的值。我的问题是,如果我尝试在Someclass
中访问这些更新的值,它只会给我默认值而不是新值。如何访问更新的值?
答案 0 :(得分:1)
您班级的主要问题是您在heromake
内创建了一个新对象,而不是使用现有对象。您可以将h
替换为self
来解决此问题(以便每次在对象上调用setHeroDicts
时):
def heromake(self):
self.setHeroDicts("Welcome", "Name")
self.setHeroDicts("AskClass", "Class")
self.setHeroDicts("AskWeapon", "Weapon")
方法的第一个参数始终设置为实例本身,因此如果要与实例进行交互或对其进行修改,则需要直接使用它。当您在原始代码中执行h = hero()
时,您将创建一个全新的hero
对象,对其进行操作,然后当控件传回您的函数时它会消失。
其他一些注意事项:你应该用CamelCase命名你的类,这样可以更容易地告诉他们是类(例如,你应该真的有class Hero
)而在python 2中你需要制作你的类来自对象(所以class Hero(object)
)。最后,你几乎要复制使用herodict
课程的整个过程,你应该考虑直接访问对象的属性,而不是让中间人herodict
(例如,而不是h.herodict["Class"]
你可以直接做h.prof
。