
On Sun, May 23, 2021 at 3:37 AM Tal Einat <taleinat@gmail.com> wrote:
I put up an early draft of a PEP on a branch in the PEPs repo: https://github.com/python/peps/blob/sentinels/pep-9999.rst
Thanks for that PEP, Tal. Good ideas and recap there. I think repr= should have a default: the name of the class within <>: <NotGiven>. Sentinels don't have state or any other data besides a name, so I would prefer not to force users to create a class just so they can instantiate it. Why not just this? NotGiven = sentinel('<NotGiven>') In this case it's harder to provide a good default repr. On the other hand, if the user must create a class, the class itself should be the sentinel. Class objects are already singletons, so that makes sense. Here is a possible class-based API: class NotGiven(Sentinel): pass That's it. Now I can use NotGiven as the sentinel, and its default repr is <NotGiven>. Behind the scenes we can have a SentinelMeta metaclass with all the magic that could be required--including the default __repr__ method. What do you think? Cheers, Luciano
(Note: This link will break once the temporary branch is deleted.)
I wrote it to summarize the discussions, organize my thoughts and explore the options. I stopped working on it late at night and sent a link to a few people to get some opinions. I didn’t intend to make it public yet, but it was noticed and replied to on the discuss.python.org thread where I put up the poll [1], so the cat is out of the proverbial bag now…
Luciano, your wish is granted! ;) - Tal Einat
[1] https://discuss.python.org/t/sentinel-values-in-the-stdlib/8810/
-- Luciano Ramalho | Author of Fluent Python (O'Reilly, 2015) | http://shop.oreilly.com/product/0636920032519.do | Technical Principal at ThoughtWorks | Twitter: @ramalhoorg