Fügen Sie dies aus Gründen der Python 2-3-Kompatibilität einfach Ihrem Beispiel hinzu:
Foo.__nonzero__ = Foo.__bool__
oder erweitern Sie die ursprüngliche Definition von Foo um:
__nonzero__ = __bool__
Sie können sie natürlich auch umgekehrt definieren, wo sich der Methodenname befindet __nonzero__
und dem Sie ihn zuweisen __bool__
, aber ich denke, der Name __nonzero__
ist nur ein Erbe der ursprünglichen C-Ishness von Pythons Interpretation von Objekten als wahr oder falsch, basierend auf ihrer Äquivalenz mit Null. Fügen Sie einfach die obige Anweisung hinzu, und Ihr Code funktioniert mit Python 2.x und funktioniert automatisch, wenn Sie auf Python 3.x aktualisieren (und schließlich die Zuweisung an ablegen __nonzero__
).
return self.bar > 10
(0 Leerzeichen eingerückt) und das zweite könnte unmittelbar vor der Zeile stehendef __init__(self):
(4 Leerzeichen eingerückt). Ist das korrekt? Oder müsste der zweite nach der__bool__
Definition gehen?Die
__bool__
Methode wird in Python 3 verwendet. Für Python 2 möchten Sie__nonzero__
.quelle
__nonzero__()
Methodenname ist wesentlich älter als die Einführung des Typsbool
in Python. Vorher verwenden Siebool
einfach die ganzen Zahlen0
und1
.0
und1
? Dilbert ;-)Weil die entsprechende spezielle Methode
__nonzero__()
in Python 2 aufgerufen wird und__bool__()
erst in Python 3.quelle