python / python/mypy

ClassVar[TypeAlias] in dataclass-like classes becomes Any

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

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

bug
主要言語
Python
スター
20.6k
フォーク
3.3k
平均マージ
1日 18時間
マージ済み PR(30日)
54

説明

Bug Report

When defining a type alias within a dataclass (or attrs) class, it has to be marked as ClassVar[^1] which causes the field to be treated as Any.

This bug has been already reported in https://github.com/python/mypy/issues/9238#issuecomment-1089065588 but never followed up.

To Reproduce

from dataclasses import dataclass
from typing import ClassVar, TypeAlias


@dataclass
class Namespace:
    Alias: ClassVar[TypeAlias] = int
    
reveal_type(Namespace.Alias)

https://mypy-play.net/?mypy=latest&python=3.12&gist=e66e903f3b055fa8433707a5e8b99ebc

Expected Behavior

main.py:16: note: Revealed type is "int"

Actual Behavior

main.py:16: note: Revealed type is "Any"

Your Environment

See the playground. Python 3.12 on Mypy 1.9.0.

[^1]: The attrs plugin crashes with an assertion error if this is forgotten, but that's a bug for another day.

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

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

はじめの一歩

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

調査の方向性

まず、提供された Python 再現プログラムを mypy 1.9.0 で実行し、表示された型を期待される int と比較します。dataclass のようなクラスで ClassVar[TypeAlias] がどのように扱われるかを追跡し、その後、表示された型が Any ではなくなるようにカバレッジを追加または更新します。attrs-plugin の assertion は明示的に対象外です。

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

評価

技術スタック
python
領域
compilers
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

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

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