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 )

  • Boolean 'und' in Python
  • Unterschied zwischen "if x" und "if x is not None"
  • Extrahieren von Werten aus einer Liste mit einem Array mit booleschen Ausdrücken
  • "True" und "False" in Python
  • Überprüfen des Datums im Datumsbereich in Python
  • Warum sind nicht "und" und "oder" Betreiber in Python?
  • 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.