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

オープン
#5,591 コメント 3 件 リアクション 0 件 担当者 1 名 GitHub で見る

@crypt0lith がすでに取り組んでいます。

2026年11月9日 から。

  • #5592 @crypt0lith による — オープン

評価

この issue はまだ評価されていません。

説明

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

主要言語
Rust
スター
7.2k
フォーク
578
PR マージ指標
30日以内にマージされた PR はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

facebook/pyrefly のほかの issue

facebook/pyrefly の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。