ooboo ooboo - 6 months ago 17
Python Question

Boolean value of objects in Python

As we know, Python has boolean values for objects: If a class has a

__len__
method, every instance of it for which
__len__()
happens to return 0 will be evaluated as a boolean
False
(for example, the empty list).

In fact, every iterable, empty custom object is evaluated as
False
if it appears in boolean expression.

Now suppose I have a class
foo
with attribute
bar
. How can I define its truth value, so that, say, it will be evaluated to
True if bar % 2 == 0
and
False
otherwise?

For example:

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


so,
a(myfoo)
should print
"eggs"
.

Answer

Refer to the Python docs for __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()