Cannot combine NewType and Literal
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 20.6k
- フォーク
- 3.3k
- PR マージ指標
- PR 指標を取得中
説明
(This seems related to, but different from, #2448.)
Feature
Allow the creation of a NewType derived from Literal.
Pitch
Currently you can define the following types:
Foo = Literal["foo"]
Bar = NewType("Bar", str)
But you can't do this:
Baz = NewType("Baz", Foo)
If you attempt to, Python won't throw any error, but mypy will complain:
error: Argument 2 to NewType(...) must be subclassable
This prevents a strict definition of a literal-based type: you either have to accept all values of the literal's type or you need to lose the type check benefits of NewType.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、Baz = NewType("Baz", Foo) の例と報告されたサブクラス化可能性のエラーを使って、mypy が NewType の第 2 引数をどのように検証し、Literal 型をどのように表現しているかを追跡します。Literal から派生した NewType に対して期待される型チェックの動作を定義し、その後、受け入れられる定義と型チェック上の利点を示すカバレッジを追加します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- compilers
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100