`isinstance` on multiple-inheritance class erases type hints
Abierto
Nadie ha tomado este issue todavía.
3.12
3.13
3.14
stdlib
topic-typing
type-bug
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 36k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Bug report
Bug description:
Steps to reproduce:
- Create a runtime checkable protocol
- Create one base class with type hints
- Create a second base class that satisfies the protocol
- Create a derived class that inherits from both the base classes
get_type_hintson the derived class and see they are correct- check the derived class
isinstanceof the protocol get_type_hintson the derived class and see that they are a blank dictionary
from abc import abstractmethod
from typing import Protocol, get_type_hints, runtime_checkable
@runtime_checkable
class Hello(Protocol):
@abstractmethod
def hello(self) -> str: ...
class Base:
a: str
class Base2:
def hello(self) -> str:
return "hello"
class Thing(Base, Base2): ...
def test_hints():
t = Thing()
assert get_type_hints(t) == {"a": str}
assert isinstance(t, Hello)
assert get_type_hints(t) == {"a": str}
CPython versions tested on:
3.11, 3.13
Operating systems tested on:
Linux
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Empieza ejecutando el reproductor proporcionado en CPython y compara get_type_hints antes y después de la comprobación isinstance. Rastrea las rutas de get_type_hints y runtime-checkable Protocol implicadas en esa comprobación. Se considera terminado cuando la instancia derivada de Thing siga mostrando {"a": str} después de isinstance(t, Hello).
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- backend
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 35/100