Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

`typing.Protocol` is explicitly treated as not a `type`

Aberta
#21,940 7 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
52/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
python
Domínio
devtools

Direção de pesquisa

Comece com a reprodução em Python fornecida usando mypy --strict e compare seus diagnósticos com o comportamento indicado do Pyright. Localize o tratamento especial de typing.Protocol no mypy e adicione testes ou atualize a cobertura para que Protocol seja aceito como um tipo e a reprodução não produza erros.

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

Descrição

bug topic-protocols topic-runtime-semantics

Bug Report

At runtime, isinstance(typing.Protocol, type) is True. When type checking, mypy appears to special-case Protocol:

  • mypy: <typing special form>
  • Pylance/Pyright: (class) Protocol

To Reproduce

from typing import Protocol

class A(Protocol): pass
    
assert Protocol in A.__bases__
bases: tuple[type, ...] = (Protocol, *A.__bases__)

playground (gist)

Expected Behavior

Same as Pyright, Protocol is a class (type), no errors.

Actual Behavior

main.py:5: error: Non-overlapping container check (element type: "<typing special form>", container item type: "type")  [comparison-overlap]
main.py:6: error: Argument 1 to <tuple> has incompatible type "<typing special form>"; expected "type"  [arg-type]

Your Environment

  • Mypy version used: 1.0.0, 1.10.1, 1.20.2, 2.3.1
  • Mypy command-line flags: --strict
  • Python version used: 3.6 - 3.14
Linguagem predominante
Python
Estrelas
20.6k
Forks
3.3k
Merge médio
1d 3h
PRs com merge (30d)
59

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.

Mais de python/mypy

Todas as issues de python/mypy

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

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