The __bool__() method
Python has a pleasant definition of falsity. The reference manual lists a large number of values that will test as equivalent to False. This includes things such as False, 0, '', (), [], and {}. Most other objects will test as equivalent to True.
Often, we'll want to check for an object being "not empty" with a simple statement as follows:
if some_object:
process( some_object )Under the hood, this is the job of the bool() built-in function. This function depends on the __bool__() method of a given object.
The default __bool__() method returns True. We can see this with the following code:
>>> x = object() >>> bool(x) True
For most classes, this is perfectly valid. Most objects are not expected to be False. For collections, however, this is not appropriate. An empty collection should be equivalent to False. A nonempty collection can return True. We might want to add a method like this to our Deck objects.
If we're wrapping a list, we might have something...