Definieren von "Boolness" einer Klasse in Python

Warum funktioniert das nicht so, wie man es naiv erwartet

class Foo(object): def __init__(self): self.bar = 3 def __bool__(self): return self.bar > 10 foo = Foo() if foo: print 'x' else: print 'y' 

(Die Ausgabe ist x )

  • Warum sind nicht "und" und "oder" Betreiber in Python?
  • Initialisieren Sie die Liste mit demselben Bool-Wert
  • Wenn Sie Python verwenden, um zu überprüfen, ob die Mausposition innerhalb des Kreises liegt, wenn Sie irgendwo innerhalb des Kreises klicken.
  • Drucken von booleschen Werten True / False mit der Methode format () in Python
  • Python: Falsch gegen 0
  • Boolesche Felder in MySQL Django Models?
  • 3 Solutions collect form web for “Definieren von "Boolness" einer Klasse in Python”

    Für Python 2-3 Kompatibilität, füge einfach zu deinem Beispiel hinzu:

     Foo.__nonzero__ = Foo.__bool__ 

    Oder erweitere die ursprüngliche Definition von Foo um:

     __nonzero__ = __bool__ 

    Du kannst sie natürlich auch umgekehrt definieren, wo der Methodenname __nonzero__ und du __bool__ , aber ich denke, der Name __nonzero__ ist nur ein Vermächtnis der ursprünglichen C-ishness von Pythons Interpretation von Objekten als Wahrheit oder Falsch auf der Grundlage von Ihre Äquivalenz mit Null. Füge einfach die obige Aussage hinzu und dein Code wird mit Python 2.x arbeiten und wird automatisch arbeiten, wenn du auf Python 3.x __nonzero__ (und eventuell hast du die Zuordnung zu __nonzero__ ).

    Die Methode __bool__ wird in Python 3 verwendet. Für Python 2 möchten Sie __nonzero__ .

    Da die entsprechende spezielle Methode __nonzero__() in Python 2 und nicht __bool__() bis Python 3 heißt.

    Python ist die beste Programmiersprache der Welt.