python / python/mypy

Error with TypeVar with constraints on field initialization

Abierto
#20,975 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Merge medio
1 d 18 h
PR fusionados (30 d)
54

Descripción

The following example fails to type-check with mypy and pyright, but succeeds with ty:

from dataclasses import dataclass
from typing import TypeVar, Generic

class X:
    pass

class Y(X):
    pass

T = TypeVar("T", X, Y)

@dataclass
class C(Generic[T]):
    v: T

def f(c: C[T]):
    # no error with mypy and ty
    # pyright reports an error on the argument
    c.v = Y()

    # no error with mypy and ty
    # pyright reports an error on the assignment
    d: C[T] = C(Y())

class M(Generic[T]):
    # no error with ty
    # mypy and pyright report an error on the assignment
    c: C[T] = C(Y())

The constraints on T effectively make Y a lower bound for T, meaning that C(Y()) should be considered a valid C[T] for any allowed T. This seems to be correctly understood by mypy for field assignment and constructor assignment within a function, but not for field initialization at the class level.

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 con el ejemplo mínimo de Python del issue y compara cómo gestiona mypy las asignaciones a TypeVar restringidos dentro de cuerpos de funciones frente a la inicialización de campos a nivel de clase. Reproduce los resultados diferentes de mypy, pyright y ty, y determina después si la inicialización a nivel de clase debería aceptar C(Y()) para cada T permitido; añade cobertura para los casos informados.

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

Evaluación

Stack tecnológico
python
Área
devtools
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
38/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.