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、既存のオブジェクトを使用する代わりに、新しいオブジェクトを作成していることです。これを次のように置き換えること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を.herodicth.herodict["Class"]h.prof

于 2013-06-03T03:24:11.727 に答える