Dla kompatybilności Python 2-3, wystarczy dodać to do Twojego przykładu:
Foo.__nonzero__ = Foo.__bool__
lub rozwinąć oryginalną definicję Foo obejmuje:
__nonzero__ = __bool__
Można oczywiście zdefiniować je w odwrotnej kolejności też, gdzie nazwa metody to __nonzero__
i przypisujesz ją do __bool__
, ale myślę, że nazwa __nonzero__
jest po prostu spuścizną oryginalnego C-ishness interpretacji obiektów Pythona jako prawdy lub falsy w oparciu o ich równoważność z ero. Wystarczy dodać powyższe oświadczenie, a kod będzie działał z Pythonem 2.x i będzie działać automatycznie po uaktualnieniu do Pythona 3.x (i ostatecznie porzucisz zadanie na __nonzero__
).
Duplikat rozwiązuje tylko problem dla Pythona 2. Podczas gdy ten daje przenośne rozwiązanie. –