Self is not rejected when used as a PEP 695 type parameter bound

Abierto
#21,960 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
python
Área
compilers

Línea de trabajo

Empieza con test-data/unit/check-selftype.test alrededor de la línea 1480 y reproduce el ejemplo de PEP 695 del issue. Sigue la validación existente de Self que se usa para otras ubicaciones no válidas y, después, añade cobertura para un límite o una restricción de un parámetro de tipo. Se considera terminado cuando mypy informa de un error para el ejemplo, mientras los tests existentes de Self siguen pasando.

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

Descripción

bug topic-self-types
Bug Report

Self is only valid in the specific locations listed in PEP 673 and Mypy already rejects several invalid locations.
See: https://github.com/python/mypy/blob/ae39cdb2fba8908eeff6ec8d6b88879c62495fcc/test-data/unit/check-selftype.test#L1480

It seems one location wasn't covered: using Self as the bound (or constraint) of a PEP 695 type parameter.

To Reproduce:
from typing import Self
class Foo:
      def fails[T: Self](self: T) -> None: pass
Expected Behavior

Mypy should reject Self here with an error.

From a quick look at other type checkers: pyright and ty treat it as an invalid/generic TypeVar bound (TypeVar upper bound cannot be generic), while zuban rejects it with the same message mypy already uses elsewhere,
Self type is only allowed in annotations within class definition.

Actual Behavior

No error is reported.

Your Environment

Mypy version: https://github.com/python/mypy/commit/ae39cdb2fba8908eeff6ec8d6b88879c62495fcc
Python version: 3.12

TLDR; originally spotted while working on #21928 See: https://github.com/python/mypy/pull/21928#issuecomment-5557910054

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

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.

Más de python/mypy

Todos los issues de python/mypy

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.