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来检查它,更改后它确实发生了变化。
是否有人可以告诉我它为什么不打印?我试过寻找答案,却找不到任何答案。请帮忙!
答案 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