Consider an `__eq__` that always raises as non-overlapping for equality purposes?
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Feature
When a class defines __eq__, Mypy understandably bails out of ever considering that class as statically non-overlapping with another.
IOW,
class A:
pass
class B:
pass
A() == B()
goes error: Non-overlapping equality check (left operand type: "A", right operand type: "B") [comparison-overlap], as you'd expect, but
class A:
def __eq__(self, other: object) -> bool:
raise RuntimeError("Please do not directly compare A objects; use special method önnönnöö()")
def önnönnöö(self, other: A | B) -> bool:
return False # some specific Explicit Is Better Than Implicit logic here
class B:
pass
A() == B()
has no errors mypy could see.
It would be useful if mypy could recognize that an __eq__ function that always raises (or, I suppose, more broadly, can never return a value) makes a class never overlap with any other class.
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
El issue trata sobre el diagnóstico comparison-overlap de mypy y el manejo de eq de Python. Empieza localizando la implementación y las pruebas de comparison-overlap; después, investiga cómo podría reconocerse un eq que siempre genera una excepción. Se considera terminado cuando el ejemplo mostrado de A y B se trata como una comprobación de igualdad sin solapamiento, sin debilitar los diagnósticos existentes.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- compilers
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100