小编典典

Python中对象的布尔值

python

众所周知,Python具有对象的布尔值:如果一个类具有一个__len__方法,则该方法的每个实例__len__()恰好返回0的值都将被评估为布尔值False(例如,空列表)。

实际上,每个可迭代的空自定义对象都被评估为False好像它出现在布尔表达式中一样。

现在假设我有一个foo带有attribute的类bar。我如何定义它的真值,这样,也就是说,它会进行评估,True if bar % 2 == 0False以其他方式?

例如:

myfoo = foo()
myfoo.bar = 3
def a(foo):
    if foo:
        print "spam"
    else:
        print "eggs"

因此,a(myfoo)应打印"eggs"


阅读 197

收藏
2020-12-20

共1个答案

小编典典

请参阅Python文档__nonzero__

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()
2020-12-20