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 )

  • Boolescher Wert von Objekten in Python
  • Pandas Boolescher Vergleich auf Dataframe
  • Vergleichen Sie Boolesche Row-Werte über mehrere Spalten in Pandas mit & / np.where () / np.any ()
  • Initialisieren Sie die Liste mit demselben Bool-Wert
  • Übergeordnetes bool () für benutzerdefinierte Klasse
  • Konvertieren Sie Pandas-Serie mit String zu boolean
  • 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.