为什么在None
声明的每个结果之后我得到print
?
在使用print
语句或类实例化时,我从未遇到过这种情况......
None
来自哪里?
class Enemy:
life = 3
def attack(self):
print("ouch!")
self.life -= 1
def checkLife(self):
if (self.life <= 0):
print('dead!')
else:
print( str(self.life) + " lives left..." )
e1 = Enemy()
print( e1.checkLife() )
# 3 lives left...
# None
print( e1.attack() )
# ouch!
# None
print( e1.checkLife() )
# 2 lives left...
# None
答案 0 :(得分:2)
class Enemy:
life = 3
def attack(self):
print("ouch!")
self.life -= 1
def checkLife(self):
if (self.life <= 0):
print('dead!')
else:
print( str(self.life) + " lives left..." )
e1 = Enemy()
e1.checkLife()
e1.attack()
e1.checkLife()
你不需要打印函数调用,因为每个函数里面都有一个打印函数,它会打印你想要看到的东西,函数本身返回None,因为没有什么可以返回,因此打印它给你无
答案 1 :(得分:2)
您{{}} {{}} {{1}不返回值的函数的返回值。
print
答案 2 :(得分:2)
如果仅使用None
(或根本没有返回),所有Python函数都返回一些内容 - return
。如果您不想看到它,请不要print
。在交互式会话中,解释器会自动打印每个表达式的值,除非它是None
。
答案 3 :(得分:2)
定义类时,类的每个方法(类的函数)都应该具有正确的标识。在您的代码 攻击中,checkLife 被解释为独立函数。这就是你试图给checkLife打电话的原因:
AttributeError:敌人实例没有属性'checkLife'
此外,您必须为您的类定义构造函数,这是一种特殊的函数,负责正确创建对象。在你的情况下,你的敌人的生命应该初始化为3.你应该在你的构造函数中定义这个属性,所以你的对象可以拥有它。这就是 self.life 的原因。
self.life 指的是您的对象的(self)属性,其名称为 life 。
class Enemy:
def __init__(self):
self.life = 3
def attack(self):
print("ouch!")
self.life -= 1
def checkLife(self):
if (self.life <= 0):
print('dead!')
else:
print( str(self.life) + " lives left..." )
e1 = Enemy()
print( e1.checkLife() )
# 3 lives left...
# None
print( e1.attack() )
# ouch!
# None
print( e1.checkLife() )
# 2 lives left...
# None
答案 4 :(得分:1)
所有Python函数都返回值
None
,除非有明确的return
语句,其值不是None
。相反,将返回值None
。
所以第二个打印实际上返回的函数结果都是None
。功能内的第一个打印就足够了。
或者您更新函数以使其具有显式return
,然后按以下方式打印返回的值:
class Enemy:
life = 3
def attack(self):
print("ouch!")
self.life -= 1
return self.life
def checkLife(self):
if (self.life <= 0):
return 'dead!'
else:
return str(self.life) + " lives left..."
e1 = Enemy()
print( e1.checkLife() )
# 3 lives left...
print( e1.attack() )
# ouch!
# 2
print( e1.checkLife() )
# 2 lives left...