python class boolean python-2.x

Definición de "boolness" de una clase en python



class boolean (3)

El método __bool__ se usa en Python 3. Para Python 2, quieres __nonzero__ .

¿Por qué no funciona esto como uno puede haber esperado ingenuamente?

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''

(La salida es x )


Para la compatibilidad de Python 2-3, simplemente agregue esto a su ejemplo:

Foo.__nonzero__ = Foo.__bool__

o expanda la definición original de Foo para incluir:

__nonzero__ = __bool__

Por supuesto, también podría definirlos en reversa, donde el nombre del método es __nonzero__ y lo asigna a __bool__ , pero creo que el nombre __nonzero__ es solo un legado de la C-ishness original de la interpretación de Python de los objetos como truthy o falsy basado en su equivalencia con cero. Simplemente agregue la declaración anterior y su código funcionará con Python 2.x, y funcionará automáticamente cuando actualice a Python 3.x (y eventualmente dejará la tarea en __nonzero__ ).