mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-08 13:04:46 +08:00
List[Foo] + List[Bar] now returns List[Foo | Bar] (#8293)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
@@ -986,8 +986,12 @@ class list(MutableSequence[_T], Generic[_T]):
|
||||
@overload
|
||||
def __setitem__(self, __s: slice, __o: Iterable[_T]) -> None: ...
|
||||
def __delitem__(self, __i: SupportsIndex | slice) -> None: ...
|
||||
# Overloading looks unnecessary, but is needed to work around complex mypy problems
|
||||
@overload
|
||||
def __add__(self, __x: list[_T]) -> list[_T]: ...
|
||||
def __iadd__(self: Self, __x: Iterable[_T]) -> Self: ...
|
||||
@overload
|
||||
def __add__(self, __x: list[_S]) -> list[_S | _T]: ...
|
||||
def __iadd__(self: Self, __x: Iterable[_T]) -> Self: ... # type: ignore[misc]
|
||||
def __mul__(self, __n: SupportsIndex) -> list[_T]: ...
|
||||
def __rmul__(self, __n: SupportsIndex) -> list[_T]: ...
|
||||
def __imul__(self: Self, __n: SupportsIndex) -> Self: ...
|
||||
|
||||
19
test_cases/stdlib/builtins/test_list.py
Normal file
19
test_cases/stdlib/builtins/test_list.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from typing import List, Union
|
||||
from typing_extensions import assert_type
|
||||
|
||||
|
||||
# list.__add__ example from #8292
|
||||
class Foo:
|
||||
def asd(self) -> int:
|
||||
return 1
|
||||
|
||||
|
||||
class Bar:
|
||||
def asd(self) -> int:
|
||||
return 2
|
||||
|
||||
|
||||
combined = [Foo()] + [Bar()]
|
||||
assert_type(combined, List[Union[Foo, Bar]])
|
||||
for item in combined:
|
||||
assert_type(item.asd(), int)
|
||||
Reference in New Issue
Block a user