我有一个Python类,我想将一个值返回给主游戏类,以便我知道用户是否退出游戏(在这种情况下我会回到菜单)或只是想要下一个级别。为此,我在我的游戏类中创建了这样的方法:
def __repr__(self):
return self.shouldIQuit
(self.shouldIQuit是对还是错)
但是,当我想使用以下代码在主类中捕获此值时:
if self.startGame: #user started the game
for i in range(4): #we iterate through all levels
x = Game(i)
print x
if x == True: break #if user pressed Escape, he doesn't want to play anymore
尽管print x
给了我正确的输出(如果我按Escape则为True,如果我完成关卡则为False或按F5转到下一个),逻辑测试总是失败并且只是想加载每一次都是下一级...为什么会这样?我尝试使用str()
将返回值转换为字符串,但无效。
答案 0 :(得分:1)
x == True
检查x
在逻辑上是否等于True
,而不是打印到True
。您可以将逻辑编码为
if str(x) == str(True)
但要定义__nonzero__(self)
(Python 3中的__bool__
)以返回self.shouldIQuit
要好得多。然后就可以了
if x
如果必须,您可以覆盖__eq__(self, other)
以检查与shouldIQuit
属性的相等性。
但实际上,这也很愚蠢。逻辑真实性不应该与它是否退出有关。