python / python/mypy

Field of union needs to be different type when reading vs setting

Abierto
#16,732 0 comentarios 2 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Bug Report

Mypy appears to infer that the type of a field of a variable that is typed as a union is a single type whether that field is being read or updated. The type correct when reading the field (union of the types of the fields) , but not correct when setting as it does not enforce that the value being assigned needs to be valid for both of the types in the union (intersection of the types of the fields).

To Reproduce

class Foo:
    a: int

class Bar:
    a: str

either: Foo | Bar
either.a = 1  # No error, despite not being valid for Bar

More detailed example: https://mypy-play.net/?mypy=latest&python=3.12&gist=bf74f1ba35979f10b1878b2e1abca865

Expected Behavior

Mypy should report the assignment as an error if it does not work with all the types in the union.

Actual Behavior

No error, despite the assignment allowing a field of type str to be an int

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

Comienza ejecutando el ejemplo proporcionado de Foo/Bar y la reproducción enlazada de mypy-play para comparar las lecturas de campos con las asignaciones en una unión. Sigue la comprobación relevante de las asignaciones de atributos de una unión y confirma después que el problema se resuelve cuando las asignaciones solo se aceptan si son válidas para cada miembro de la unión y el ejemplo reportado produce un error.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
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.