Pour la compatibilité avec Python 2-3, ajoutez simplement ceci à votre exemple :
Foo.__nonzero__ = Foo.__bool__
ou d'élargir la définition originale de Foo pour y inclure :
__nonzero__ = __bool__
Vous pouvez bien sûr les définir à l'inverse, où le nom de la méthode est __nonzero__
et vous l'affectez à __bool__
mais je pense que le nom __nonzero__
est juste un héritage du C-ishness original de l'interprétation de Python des objets comme vrais ou faux sur la base de leur équivalence avec zéro. Ajoutez simplement la déclaration ci-dessus et votre code fonctionnera avec Python 2.x, et fonctionnera automatiquement lorsque vous passerez à Python 3.x (et éventuellement vous pourrez abandonner l'assignation à __nonzero__
).