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?.