Skip to content

Commit db50008

Browse files
allow arbitrary types in set difference
1 parent 90d8559 commit db50008

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from typing_extensions import assert_type
2+
3+
# Note: type checkers / linters are free to point out that the set difference
4+
# below is redundant. But typeshed should allow it, as its job is to describe
5+
# what is legal in Python, not what is sensible.
6+
x: set[str] = {"foo", "bar"}
7+
assert_type(x - {123}, set[str])

stdlib/builtins.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,7 +1282,7 @@ class set(MutableSet[_T]):
12821282
def __iand__(self, value: AbstractSet[object], /) -> Self: ...
12831283
def __or__(self, value: AbstractSet[_S], /) -> set[_T | _S]: ...
12841284
def __ior__(self, value: AbstractSet[_T], /) -> Self: ... # type: ignore[override,misc]
1285-
def __sub__(self, value: AbstractSet[_T | None], /) -> set[_T]: ...
1285+
def __sub__(self, value: AbstractSet[object], /) -> set[_T]: ...
12861286
def __isub__(self, value: AbstractSet[object], /) -> Self: ...
12871287
def __xor__(self, value: AbstractSet[_S], /) -> set[_T | _S]: ...
12881288
def __ixor__(self, value: AbstractSet[_T], /) -> Self: ... # type: ignore[override,misc]
@@ -1313,7 +1313,7 @@ class frozenset(AbstractSet[_T_co]):
13131313
def __iter__(self) -> Iterator[_T_co]: ...
13141314
def __and__(self, value: AbstractSet[_T_co], /) -> frozenset[_T_co]: ...
13151315
def __or__(self, value: AbstractSet[_S], /) -> frozenset[_T_co | _S]: ...
1316-
def __sub__(self, value: AbstractSet[_T_co], /) -> frozenset[_T_co]: ...
1316+
def __sub__(self, value: AbstractSet[object], /) -> frozenset[_T_co]: ...
13171317
def __xor__(self, value: AbstractSet[_S], /) -> frozenset[_T_co | _S]: ...
13181318
def __le__(self, value: AbstractSet[object], /) -> bool: ...
13191319
def __lt__(self, value: AbstractSet[object], /) -> bool: ...

0 commit comments

Comments
 (0)