Как мы знаем, Python имеет логические значения для объектов: если класс имеет метод __len__, каждый экземпляр которого, для которого __len__() произойдет с возвратом 0, будет оцениваться как булев False (например, пустой список).
Фактически, каждый итерируемый пустой пользовательский объект оценивается как False, если он появляется в логическом выражении.
Теперь предположим, что у меня есть класс foo с атрибутом bar. Как я могу определить его значение истины, так что, скажем, он будет оцениваться как True if bar % 2 == 0 и False иначе?
Например:
myfoo = foo()
myfoo.bar = 3
def a(myfoo):
if foo:
print "spam"
else:
print "eggs"
поэтому a(myfoo) должен печатать "eggs".