Enum .name property has str type
オープン
まだ誰も着手していません。
bug
topic-enum
- 主要言語
- Python
- スター
- 20.6k
- フォーク
- 3.3k
- PR マージ指標
- PR 指標を取得中
説明
Bug Report
I stumbled across a weird issue with literals and using the .name property with enums. I was wondering if this is expected behavior. Seems inconsistent to me.
To Reproduce
from enum import Enum
from typing import Literal
class Foo(Enum):
A = 1
B = 1
keys = Literal["A", "B", "C"]
def f(name: keys) -> None:
print(name)
foo: Foo = Foo.A
f(foo.name) # Error: Argument 1 to "f" has incompatible type "str"; expected "Literal['A', 'B', 'C']"
f(Foo.A.name) # No Error
Expected Behavior
I would expect both versions to be valid.
Your Environment
- Mypy version used: mypy 1.15.0 (compiled: yes)
- Mypy command-line flags: none
- Mypy configuration options from
mypy.ini(and other config files): none - Python version used: 3.11.11
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、mypy 1.15.0 で issue の最小限の Python 3.11 再現コードを実行し、foo.name と Foo.A.name の推論された型を比較します。これらの式に関係する enum と Literal の処理を追跡し、その後、報告された呼び出しのカバレッジを追加して、動作が合意された期待値と一致することを確認します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- tooling
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 45/100