diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index 5cde284db04a..daecbca89643 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -950,9 +950,20 @@ class memoryview(Sequence[_I]): if sys.version_info >= (3, 14): def __class_getitem__(cls, item: Any, /) -> GenericAlias: ... +class _Truthy(Protocol): + def __bool__(self) -> Literal[True]: ... + +class _Falsy(Protocol): + def __bool__(self) -> Literal[False]: ... + @final class bool(int): - def __new__(cls, o: object = False, /) -> Self: ... + @overload + def __new__(cls, o: _Truthy, /) -> Literal[True]: ... + @overload + def __new__(cls, o: _Falsy = False, /) -> Literal[False]: ... + @overload + def __new__(cls, o: object, /) -> Self: ... # The following overloads could be represented more elegantly with a TypeVar("_B", bool, int), # however mypy has a bug regarding TypeVar constraints (https://github.com/python/mypy/issues/11880). @overload