views:

81

answers:

3

All I want is for bool(myInstance) to return False (and for myInstance to evaluate to False when in a conditional like if/or/and. I know how to override >, <, =)

I've tried this:

class test:
    def __bool__(self):
        return False

myInst = test()
print bool(myInst) #prints "True"
print myInst.__bool__() #prints "False"

Any suggestions?

(I am using Python 2.6)

+1  A: 

test.__nonzero__()

Ignacio Vazquez-Abrams
+4  A: 

Is this Python 2.x or Python 3.x? I think for Python 2.x you are looking to override __nonzero__() instead?

class test:
    def __nonzero__(self):
        return False
Joe Holloway
+1  A: 

If you want to keep your code forward compatible with python3 you could do something like this

class test:
    def __bool__(self):
        return False
    __nonzero__=__bool__
gnibbler