In the documentation on built-in constants (excluding site
constants) it's stated that:
Note: The names
None
,False
,True
and__debug__
cannot be reassigned (assignments to them, even as an attribute name, raiseSyntaxError
), so they can be considered “true” constants.
If I'm not mistaken, True
and False
became "true" contants in Python 3. (As also described in the duplicate.)
Question is, why aren't the other two (Ellipsis
, NotImplemented
) "true" contants? Is there a use case for re-assigning these (numpy
with Ellipsis
perhaps?) that has exempted them from this limitation?
Exacerbating my confusion, in the documentation for standard library types, both the Ellipsis
and NotImplemented
types are, behaviorally, identical to the None
type. Namely:
- They are singletons
- They don't support special operations.
This question is not related to the proposed duplicate: Why were True and False changed to keywords in Python 3. It asks something completely different, namely, why Ellipsis
and NotImplemented
are not "true" constants and not why True
and False
where changed into ones.