python / python/mypy

Consider an `__eq__` that always raises as non-overlapping for equality purposes?

Abierto
#19,595 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

feature
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

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. 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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.