类返回值未通过逻辑测试

时间:2014-05-24 23:44:58

标签: python python-2.7

我有一个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()将返回值转换为字符串,但无效。

1 个答案:

答案 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属性的相等性。


但实际上,这也很愚蠢。逻辑真实性不应该与它是否退出有关。