python / steering-council

Communications from the Steering Council
159 stars 23 forks source link

PEP 661 -- Sentinel Values #258

Open taleinat opened 1 month ago

taleinat commented 1 month ago

Please consider PEP 661 -- Sentinel Values https://peps.python.org/pep-0661/

JelleZijlstra commented 4 weeks ago

Since this PEP proposes a change to the type system (an extension of the values allowed in Literal[]), the Typing Council is also looking at it. We'll discuss internally and share our opinion here if the Steering Council thinks it's helpful.

encukou commented 4 weeks ago

Note that there is some more discussion on Discourse, and the PEP might need to be changed.

JelleZijlstra commented 3 weeks ago

On behalf of the Typing Council:

The PEP currently proposes to use Literal[SentinelName] as the type annotation to describe the type of a sentinel object. We prefer to support SentinelName directly without the need to wrap it in a Literal . This would require the sentinel base class to supply a __or__ method to support unions, which would be straightforward. The most common sentinel value used in Python is None, and it is special-cased in the type system to not require Literal[None] in a type annotation. Since type checkers (both static and runtime) will already need to special-case sentinels, we wouldn’t gain any simplicity by forcing users to wrap sentinels in Literal[].

A suggestion came up to allow both forms in type annotations, Literal[SentinelName] and SentinelName. We prefer to keep only the latter so we don’t introduce redundant ways to describe the same type.

(Note from me personally: The change we're recommending here aligns with something Tal already said he was planning to change in the PEP, leading to Petr's message above.)

taleinat commented 3 weeks ago

Thank you @JelleZijlstra and members of the Typing Council! Your opinions and feedback are greatly appreciated.

I now agree that SentinelName is preferable to Literal[SentinelName]. I greatly prefer only SentinelName rather than both options.

taleinat commented 2 weeks ago

Please note that the PEP has been amended to reflect the changes to typing as described by @JelleZijlstra above.

Yhg1s commented 2 weeks ago

FYI, the current SC decided to leave this PEP for the next SC to decide, given that SC elections are very soon (https://discuss.python.org/t/steering-council-nominations-will-open-november-7th-2024).