python / python/cpython

Overzealous Optimization For `isinstance`

Aberta
#144,873 8 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

docs
Linguagem predominante
Python
Estrelas
77.2k
Forks
35.9k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

Bug report

Bug description:

The custom __instancecheck__ dunder method allows full customization (described in the Data model).

However, it produces a spurious result:

class CustomIsInstanceMeta(type):
    def __instancecheck__(cls, instance: object) -> bool:
        return type(instance) is int

class CustomIsInstance(metaclass=CustomIsInstanceMeta):
    ...

class CustomIsInstanceSubclass(CustomIsInstance):
    ...


print(isinstance(5, CustomIsInstance)) # True
print(isinstance(CustomIsInstance(), CustomIsInstance)) # True (should be False)
print(isinstance(CustomIsInstanceSubclass(), CustomIsInstance)) # False

This is caused by:
https://github.com/python/cpython/blob/23c488d6197191d355be6733699a295c20806932/Objects/abstract.c#L2641-L2644
which is invalid in this case.

This is a reframing of #79264 (request to fix documentation)

CPython versions tested on:

3.13

Operating systems tested on:

Linux

Linked PRs
  • gh-144874
  • gh-144997

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

Revise Objects/abstract.c nas linhas 2641-2644 e os PRs vinculados gh-144874 e gh-144997. Execute a reprodução fornecida de isinstance no Python 3.13/Linux para confirmar os resultados espúrios. Considera-se concluído quando o comportamento relatado estiver resolvido e o resultado estiver alinhado com o problema de documentação levantado em #79264.

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

Avaliação

Stack de tecnologia
c, 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
25/100

Receba novas issues na sua caixa de entrada

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