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 )

  • Python: repr vs backquote
  • Den Namen einer Variablen als String erhalten
  • Warum gibt es einen Leistungsunterschied zwischen der Reihenfolge einer verschachtelten Schleife?
  • Wie kann ich einen String in Python 2 falten?
  • Was macht python print () Funktion eigentlich?
  • Führen Sie interaktive Bash mit Popen und eine dedizierte TTY Python
  • Türme von Hanoi mit "Zähler" in Python
  • Python unerwartete EOF beim Parsing
  • 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.