For Python 2-3 compatibility, add a line after the class definition block to alias the method:
class Foo(object):
...
Foo.__nonzero__ = Foo.__bool__
or include the alias directly in the class definition:
class Foo(object):
def __bool__(self):
...
__nonzero__ = __bool__
Of course this would also work the other way around, but I think the name __nonzero__
is just a legacy of the original C-ishness of Python's interpretation of objects as truthy or falsy based on their equivalence with zero. Just add the statement above and the code will work with regardless of the version of Python (and the __nonzero__
definition can be dropped when support for 2.x is no longer needed).