1

クラスの使用法をよりよく理解できるように、簡単なスクリプトを作成しました。ゲーム用のランダムなキャラクターを生成します。オブジェクトを定義し、生成された文字を出力するそのオブジェクトの関数を呼び出します。印刷されたブロックの最後に、無関係な「なし」があり、それがどこから来ているのか、なぜ印刷されているのかわかりません。出力例は次のとおりです。

ted
Strength  : 20
Dexterity : 17
Hit Points: 100
Aura      : 100
Weapon    :  
Spell     :  
Item      :  
Element   :  
--------------------
None

私のコードでは、最後の行はplayer.stats()print "-" * 20なし」のすぐ上に表示されています。オブジェクトを定義するコードは次のとおりです。

class Player(object):

def __init__(self, name):
    self.name = name
    self.strength = randint(15, 20)
    self.dexterity = randint(15, 20)
    self.hit_points = 100
    self.aura = 100
    self.weapon = " "
    self.spell = " "
    self.item = " "
    self.element = " "

def stats(self):
    print "\n"
    print self.name
    print "Strength  : %d" % self.strength
    print "Dexterity : %d" % self.dexterity
    print "Hit Points: %d" % self.hit_points
    print "Aura      : %d" % self.aura
    print "Weapon    : %s" % self.weapon
    print "Spell      : %s" % self.spell
    print "Item      : %s" % self.item
    print "Element   : %s" % self.element
    print "-" * 20

次に、オブジェクトはこれを使用してインスタンス化されます。

name = raw_input("Name your character: ")

player = Player(name)
print player.stats()

完全なコードは、必要に応じて Pastebinで読むことができます。

4

3 に答える 3

5
print player.stats()

犯人です。player.stats() == None

あなただけが欲しい:

player.stats()

関数に名前を付ける方がよいでしょうplayer.printStats()


別のオプションは、文字列を返すようにすることです。

def stats(self):
    return '\n'.join([
        self.name
        "Strength  : %d" % self.strength,
        "Dexterity : %d" % self.dexterity,
        "Hit Points: %d" % self.hit_points,
        "Aura      : %d" % self.aura,
        "Weapon    : %s" % self.weapon,
        "Spell     : %s" % self.spell,
        "Item      : %s" % self.item,
        "Element   : %s" % self.element,
        "-" * 20
    ])

そして、print player.stats()期待どおりに動作します

于 2012-11-10T19:45:38.093 に答える
3

メソッドはstats()何も返しません。何も返さない関数は に評価されNoneます。これはあなたが印刷するものです。

したがって、関数の戻り値を出力しないでください。それを呼び出すだけです。ここで、関数の名前を as に変更して、その機能をprintStats()明確にする必要があります。そして、次のように呼び出します。

def printStats(self):
    ....

player = Player(name)
player.printStats()

命名は、プログラミングの非常に重要な部分です。名前の選択が少し悪いと、このような混乱が生じることがよくあります。

于 2012-11-10T19:47:08.140 に答える
2

次の戻り値を出力しplayer.stats()ます。

print player.stats()

ただし、.stats()メソッドには return ステートメントがありません。Nonereturn ステートメントが指定されていない場合、Python の関数またはメソッドのデフォルトの戻り値は です。

>>> def foo():
...     pass
...
>>> print foo()
None

printメソッド呼び出しの前に を削除するか、メソッドstats()ですべての印刷を行う代わりに、印刷する文字列を返してください。

于 2012-11-10T19:48:27.243 に答える