I really don’t like it. It’s very verbose, and doesn’t add any information about what a function actually gets or returns. I think that it’s very natural to have other sentinels behave like the one sentinel everyone is always using.
(You may even say that it’s consistent. ABCs allow isinstance(x, T) to return True even if type(x) is not really a subclass of T, and it’s allowed to use T in a type signature and return x. I just used the existing mechanism to make Quit an abstract base class, that happens to be a “fake base class” of its metaclass, So, according to the current rules, there should be no problem in specifying that a function returns an object of type Quit and returning the object Quit, since Quit is an “abstract instance” of the class Quit
)