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(foo):
if foo:
print "spam"
else:
print "eggs"
so, a(myfoo) should print "eggs".
To close questions that are specifically about debugging an error caused by using the 3.x-specific approach in 2.x, use How can I implement conversion to boolean for classes in 2.x? Why doesn't the "__bool__" magic method work?.