Python中对象的布尔值

时间:2009-07-06 13:59:55

标签: python boolean

正如我们所知,Python具有对象的布尔值:如果一个类有__len__方法,那么__len__()碰巧返回0的每个实例都将被计算为布尔值{{1 (例如,空列表)。

实际上,如果它出现在布尔表达式中,则每个可迭代的自定义对象都将被计算为False

现在假设我有一个属性为False的课程foo。我如何定义其真值,以便比较,它将被评估为barTrue if bar % 2 == 0

例如:

False

因此,myfoo = foo() myfoo.bar = 3 def a(myfoo): if foo: print "spam" else: print "eggs" 应该打印a(myfoo)

2 个答案:

答案 0 :(得分:41)

在Python< 3.0:

您必须使用__nonzero__来实现您的目标。这是在评估布尔上下文中的对象时由Python自动调用的方法。它必须返回一个布尔值,用作要评估的值。

E.G:

class Foo(object):

    def __init__(self, bar) :
        self.bar = bar

    def __nonzero__(self) :
        return self.bar % 2 == 0

if __name__ == "__main__":
     if (Foo(2)) : print "yess !"

在Python中=> 3.0:

同样的事情,除了方法已被重命名为更明显的__bool__

答案 1 :(得分:36)

请参阅__nonzero__的Python文档。

class foo(object):
    def __nonzero__( self) :
        return self.bar % 2 == 0

def a(foo):
    if foo:
        print "spam"
    else:
        print "eggs"

def main():
    myfoo = foo()
    myfoo.bar = 3
    a(myfoo)

if __name__ == "__main__":
    main()