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. 这是您打印的内容。

所以,不要打印函数的返回值。就叫吧。现在,您应该重命名该函数printStats()以明确其作用。然后就这样称呼它:

def printStats(self):
    ....

player = Player(name)
player.printStats()

命名是编程中非常重要的一部分。名称选择稍差往往会导致这样的混乱。

于 2012-11-10T19:47:08.140 回答
2

您打印的返回值player.stats()

print player.stats()

但该.stats()方法没有返回语句。None如果没有给出 return 语句,python 中任何函数或方法的默认返回值为:

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

print要么在方法调用之前删除,要么stats()返回一个要打印的字符串,而不是在方法中进行所有打印。

于 2012-11-10T19:48:27.243 回答