Search code examples
pythonclassconditional-statements

Assign class boolean value in Python


If statements in Python allow you to do something like:

   if not x:
       print "X is false."

This works if you're using an empty list, an empty dictionary, None, 0, etc, but what if you have your own custom class? Can you assign a false value for that class so that in the same style of conditional, it will return false?


Solution

  • Since Python 3, you need to implement the __bool__ method on your class. This should return True or False to determine the truth value:

    class MyClass:
        def __init__(self, val):
            self.val = val
        def __bool__(self):
            return self.val != 0  #This is an example, you can use any condition
    
    x = MyClass(0)
    if not x:
        print('x is false')
    

    If __bool__ has not been defined, the implementation will call __len__ and the instance will be considered True if it returned a nonzero value. If __len__ hasn't been defined either, all instances will be considered True.

    For further reading:


    In Python 2, the special method __nonzero__ was used instead of __bool__.