0

所以我有这个类:

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它只会给我默认值而不是新值。如何访问更新的值?

4

1 回答 1

1

您的班级的主要问题是您正在其中创建一个新对象,heromake而不是使用现有对象。您可以通过替换来解决此问题hself以便每次调用setHeroDicts对象时):

def heromake(self):
    self.setHeroDicts("Welcome", "Name")
    self.setHeroDicts("AskClass", "Class")
    self.setHeroDicts("AskWeapon", "Weapon")

方法的第一个参数总是设置为实例本身,所以如果你想与实例交互或改变它,你需要直接使用它。当您h = hero()在原始代码中执行此操作时,您会创建一个全新的hero对象,对其进行操作,然后当控制权传回您的函数时它就会消失。

其他一些注意事项:你应该用 CamelCase 命名你的类,这样更容易分辨它们是类(例如,你应该真的有class Hero),在 python 2 中,你需要让你的类从 object 派生(so class Hero(object))。最后,您几乎重复了herodict使用.herodicth.herodict["Class"]h.prof

于 2013-06-03T03:24:11.727 回答