我写了一个简单的脚本来帮助我更好地理解使用类。它为游戏生成随机字符。我定义了该对象,然后在该对象上调用一个函数来打印出生成的字符。在印刷块的末尾,有一个无关的“无”,我不确定它的来源以及为什么要打印。这是示例输出:
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()
如有必要,可以阅读完整的代码here at Pastebin。
答案 0 :(得分: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()
会按预期行事
答案 1 :(得分:3)
stats()
方法不会返回任何内容。不返回任何内容的函数的计算结果为None
。这就是你打印的内容。
因此,不要打印函数的返回值。打电话吧。现在,您应该将函数重命名为printStats()
以明确其功能。然后就这样称呼它:
def printStats(self):
....
player = Player(name)
player.printStats()
命名是编程中非常重要的一部分。一个稍微差一点的名字选择经常会导致这样的混乱。
答案 2 :(得分:2)
您打印player.stats()
的返回值:
print player.stats()
但.stats()
方法没有return语句。如果没有给出return语句,python中任何函数或方法的默认返回值是None
:
>>> def foo():
... pass
...
>>> print foo()
None
在方法调用之前删除print
,或让stats()
返回要打印的字符串,而不是在方法中执行所有打印。