I'm not sure I'm convinced by Sylvain that Boolean needs to be an ABC in the standard library; Guido expresses skepticism. Of course it is possible to define it in some other library that actually needs to use `isinstance(x, Boolean)` as Sylvain demonstraits in his post. I'm not sure I'm unconvinced either, I can see a certain value to saying a given value is "fully round-trippable to bool" (as is np.bool_).
But just for anyone who doesn't know NumPy, here's a quick illustration of what I alluded to:
In [1]: import numpy as np
In [2]: arr = np.array([7,8,12,33])
In [3]: ndx1 = np.array([0,1,1,0], dtype=int)
In [4]: ndx2 = np.array([0,1,1,0], dtype=bool)
Out[5]: array([7, 8, 8, 7])
ndx1 and ndx2 are both nice things (and are both often programmatically constructed by operations in NumPy). But indexing using ndx1 gives us an array of the things in the listed positions in arr. In this case, we happen to choose two each of the things an index 0 and index 1 in the result.
Indexing by ndx2 gives us a filter of only those positions in arr corresponding to 'True's. These are both nice things to be able to do, but if NumPy's True was a special kind of 1, it wouldn't work out unambiguously. However, recent versions of NumPy have gotten a bit smarter about recognizing the special type of Python bools, so it's less of a trap than it used to be. Still, contrast these (using actual Python lists for the indexes:
In [10]: arr[[False, True, True, False]]
In [11]: arr[[False, True, 1, 0]]
Out[11]: array([7, 8, 8, 7])