
On 5/13/2021 1:39 PM, Tal Einat wrote:
On Thu, May 13, 2021 at 7:44 PM Ethan Furman <ethan@stoneleaf.us> wrote:
Consider me complaining. ;-) +1
An actual Sentinel class would be helpful:
>>> class Sentinel: ... def __init__(self, repr): ... self.repr = repr ... def __repr__(self): ... return self.repr ...
>>> MISSING = Sentinel('MISSING') >>> MISSING MISSING
>>> implicit = Sentinel('<implicit>') >>> implicit <implicit> Here is my suggestion (also posted on the related bpo-44123), which is also simple, ensures a single instance is used, even considering multi-threading and pickling, and has a better repr:
class Sentinel: def __new__(cls, *args, **kwargs): raise TypeError(f'{cls.__qualname__} cannot be instantiated')
class MISSING(Sentinel): pass
MISSING <class '__main__.MISSING'>
I think a repr of just "MISSING", or maybe "dataclasses.MISSING" would be better. Eric