打印实例变量后没有

时间:2018-01-27 15:30:34

标签: python

为什么在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

5 个答案:

答案 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...