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/