为什么'不是'与字典一起使用时无法正常工作?

时间:2016-04-18 17:02:53

标签: python class python-3.x if-statement logical-operators

class Enemy(object):
    def __init__(self, name, hp, damage):
       self.name = name
       self.hp = hp
       self.damage = damage

    def is_alive(self):
       return self.hp > 0

enemies = {}

enemies['dog'] = Enemy("Dog", 20, 5)

if enemies['dog'].is_alive:
   print("Woof, Woof!")

enemies['dog'].hp = 0

print(enemies['dog'].hp)

if not enemies['dog'].is_alive:
   print("The dog is dead")

如上所示,我创建了一个具有检查其中一个变量数量的函数的类。当我运行它时,它可以工作,但是,当使用'不是'为了让它在0时打印,它不会打印任何东西,即使我将变量更改为0.我通过打印HP来检查它,更改后它确实发生了变化。

是否有人可以告诉我它为什么不打印?我试过寻找答案,却找不到任何答案。请帮忙!

2 个答案:

答案 0 :(得分:4)

is_alive是一个不是None,空字符串,0[](,)等的函数,因此评估为{{1}在if语句中使用时。

True

您应该调用该函数来获取返回值:

>>> func = lambda: False
>>> if func:
...     print("ehehe")
ehehe

>>> if func():
...     print("ehehe")

顺便说一下,调用方法时可以使用@property装饰器去除括号:

>>> if enemies['dog'].is_alive():
...     print("Woof, Woof!")

答案 1 :(得分:1)

is_alive是一种方法,所以它需要括号。对字典的赋值与普通变量的赋值没有区别。

class Enemy(object):
    def __init__(self, name, hp, damage):
       self.name = name
       self.hp = hp
       self.damage = damage

    def is_alive(self):
       return self.hp > 0

enemies = {}

enemies['dog'] = Enemy("Dog", 20, 5)
print enemies['dog'].is_alive() 
enemies['dog'].hp = 0
print enemies['dog'].hp 
print enemies['dog'].is_alive()

print

a = Enemy("Dog", 20, 5)
print a.is_alive()
a.hp = 0
print(a.hp)
print a.is_alive()

if not a.is_alive():
    print 'dog is dead'

输出:

True
0
False

True
0
False
dog is dead