python / python/mypy

Generic Type[T] function argument rejected as base class

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

まだ誰も着手していません。

bug
主要言語
Python
スター
20.6k
フォーク
3.3k
PR マージ指標
PR 指標を取得中

説明

Bug Report

Since https://github.com/python/mypy/issues/5865 was fixed, the following code now type checks:

from typing import Any, Type


def f(typ: Type[Any]) -> Type[Any]:
    class C(typ):
        pass

    return C

However if we make the superclass generic, it doesn't type check anymore which I would expect it to do.

To Reproduce

from typing import Type, TypeVar

T = TypeVar("T")


def f(typ: Type[T]) -> Type[T]:
    class C(typ):
        pass

    return C

Actual Behavior

mypy_return_type.py:7: error: Variable "typ" is not valid as a type  [valid-type]
mypy_return_type.py:7: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
mypy_return_type.py:7: error: Invalid base class "typ"  [misc]
Found 2 errors in 1 file (checked 1 source file)

Your Environment

  • Mypy version used: 1.0.0+dev.e9f5858c44b61c2d02819940debe3c31d099f9d5
  • Mypy command-line flags: mypy mypy_return_type.py
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: 3.10.9

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

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

調査の方向性

提供された汎用の Type[T] の例を mypy mypy_return_type.py で再現し、その後、基底クラスとして使用される変数式の型チェックの経路を追跡して、非汎用の Type[Any] のケースと比較します。完了条件は、汎用の例が valid-typeInvalid base class のエラーなしに型チェックを通過し、Type[T] の戻り値型を維持することです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
devtools
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
明確に書かれている
初心者へのやさしさ
38/100

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

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