python / python/cpython

[PEP 696] `TypeError` when subclassing and omitting `TypeVar` with default.

Aberta
#140,596 3 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

stdlib topic-typing type-bug
Linguagem predominante
Python
Estrelas
77.2k
Forks
36k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

Bug report

Bug description:

The following example raises a TypeError: Some type variables (T) are not listed in Generic[U]:

class Bar[T, S=T]: ...

class Baz[U](Bar[U]): ...
Full Traceback
Traceback (most recent call last):
  File "/home/rscholz/Downloads/tmp.py", line 3, in <module>
    class Baz[U](Bar[U]): ...
  File "/home/rscholz/Downloads/tmp.py", line 3, in <generic parameters of Baz>
    class Baz[U](Bar[U]): ...
  File "/usr/lib/python3.13/typing.py", line 1288, in _generic_init_subclass
    raise TypeError(f"Some type variables ({s_vars}) are"
                    f" not listed in Generic[{s_args}]")
TypeError: Some type variables (T) are not listed in Generic[U]

The PEP states that

non-overridden defaults should be substituted in, and type parameters with such defaults can be further specialised down the line.

And the typing spec uses similar phrasing, which makes me believe this is a bug. In the example above, I'd expect that Baz[U] is a Bar[U, U] by substitution + default.

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Linked PRs
  • gh-155646

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece em /usr/lib/python3.13/typing.py, em _generic_init_subclass, onde o TypeError relatado é gerado, e compare o comportamento com as seções sobre subclassing da PEP 696 e da especificação de typing. Considera-se concluído quando o exemplo mostrado de Bar/Baz segue o comportamento documentado de substituição padrão sem gerar o erro relatado.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
backend
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Claramente especificada
Facilidade para iniciantes
20/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.