Para compatibilidad Python 2-3, sólo tiene que añadir esto a su ejemplo:
Foo.__nonzero__ = Foo.__bool__
o ampliar la definición original de Foo incluir:
__nonzero__ = __bool__
Se podría, por supuesto, ellos definen a la inversa también, donde el nombre del método es __nonzero__
y lo ha asignado a __bool__
, pero creo que el nombre __nonzero__
es sólo un legado del original C-ishness de la interpretación de Python de objetos como Truthy o Falsy basado en su equivalencia con z ero. Sólo tiene que añadir la declaración anterior y su código trabajará con Python 2.x, y trabajará de forma automática cuando se actualiza a Python 3.x (y, finalmente, una caída de la asignación a __nonzero__
).
El duplicado solamente se refiere al problema de Python 2. Mientras que éste da una solución portátil. –