`type[Self]` converted to a callable drops constructor signature

Abierto
#5,591 3 comentarios 0 reacciones 1 asignado Ver en GitHub

@crypt0lith ya está trabajando en esto.

Desde el 9/11/2026.

  • #5592 de @crypt0lith — abierto

Evaluación

Este issue todavía no se ha evaluado.

Descripción

has-open-pr typechecking
Describe the Bug
from typing import Callable


def identity[**P, R](cb: Callable[P, R]) -> Callable[P, R]:
    return cb


class Foo:
    def __init__(self, value: int) -> None: ...

    @classmethod
    def meth(cls) -> None:
        reveal_type(cls)    # type[Self@Foo]
        reveal_type(identity(cls))  # (*args: Any, **kwds: Any) -> Any
        cls("") # error, expected
        f: Callable[[str], Foo] = cls   # no error


def explicit(t: type[Foo]) -> None:
    reveal_type(identity(t))  # (value: int) -> Foo

When a variable declared type[Self] (such as the cls parameter of a classmethod) is used where a callable is expected, pyrefly treats it as type.__call__ instead of using the constructor of the class bound to Self.

Sandbox Link

https://pyrefly.org/sandbox/?project=v2.pZU_b4MwEMW_yqkMuFaEd6ZMnaOuqENq3NRqhKPi_sm3z_MdDgGhRFFYEJbf4fO9390dLTM3j1QCcapvXRd9PDZab1b0-qbse33e1vASO2C6lC9W7GWB-cjmSwg3uUSRR19RVVUZvjXHEPymOCq775dAvmidsgVPkdJ2TWrbaxwHJVvanVNnGXQFKQ2G0XF4smj99dfKB_8X7zEOJAo1fHqGin2xIvd_gBXccOz0fFzcJDcwjCacBiaAnI_ZBVGP9UCUvbc-qlhLEkkxz3sxizjkMLti6NlqM6MXtJEFGjyDFg9Cdj8YJHA-ClJghjj6jPHQ18ZkefjeGdeZNtjeTBSGEtPb363nhKfhKDCYPcI-QlgpgJXX-CoTXthxFZkT

(Only applicable for extension issues) IDE Information

No response

Lenguaje dominante
Rust
Estrellas
7.2k
Forks
578
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

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 facebook/pyrefly

Todos los issues de facebook/pyrefly

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.