Overload resolution collapses to Any when Any is nested inside a generic argument, not just top-level
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 55/100
Direção de pesquisa
Comece executando o snippet fornecido com mypy 2.3.0 e lendo a seção da documentação “Type checking calls to overloads”. Rastreie a resolução de sobrecargas para Sequence[Any] em comparação com Sequence[int]; considera-se concluído quando o comportamento pretendido estiver estabelecido e o tipo revelado, a implementação ou a documentação corresponder a essa decisão.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Bug Report
The docs state the return type becomes Any only when "an argument [is] of type Any". But when the Any is nested inside a generic type argument (Sequence[Any] vs Sequence[int]), mypy also collapses the result to Any, even though the first overload matches unambiguously. Is this intended? If so, the "Type checking calls to overloads" section should probably document the nested case.
To Reproduce
from collections.abc import Sequence
from typing import Any, overload, reveal_type
@overload
def f(s: Sequence[int]) -> str: ...
@overload
def f(s: object) -> int: ...
def f(s: object) -> int | str:
return "2"
concrete: Sequence[int] = [1]
nested_any: Sequence[Any] = [1]
reveal_type(f(concrete)) # Revealed type is "str" (expected)
reveal_type(f(nested_any)) # Revealed type is "Any" (surprising)
Expected Behavior
reveal_type on Sequence[Any] should show "str"
Actual Behavior
reveal_type on Sequence[Any] shows "Any"
Your Environment
- Mypy version used: mypy 2.3.0
- Mypy command-line flags: none
- Mypy configuration options from
mypy.ini(and other config files): none - Python version used: Python 3.14.6
- Linguagem predominante
- Python
- Estrelas
- 20.6k
- Forks
- 3.3k
- Merge médio
- 1d 3h
- PRs com merge (30d)
- 59
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de python/mypy
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
-
documentation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
bug topic-configuration topic-error-reporting
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
-
bug topic-attrs
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
Todas as issues de python/mypy
Issues semelhantes
-
area: harness bug status: needs-triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Human-Agent-Society/reef#625 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 80/100
learningequality/kolibri#15351 · 2 comentários ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
Name consistency Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
eellak/triplestore#65 · 1 comentário ·