python / python/typing

Typing spec should be clearer that type checkers are not expected to support PEP 3141

未關閉
#1,663 22 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

topic: documentation topic: typing spec
主要語言
Python
星號
1.8k
分支
302
平均合併
23 小時
30 天內合併 PR
8

描述

With regards to the numeric tower, PEP 484 states:

PEP 3141 defines Python’s numeric tower, and the stdlib module numbers implements the corresponding ABCs (Number, Complex, Real, Rational and Integral). There are some issues with these ABCs, but the built-in concrete numeric classes complex, float and int are ubiquitous (especially the latter two :-).

Rather than requiring that users write import numbers and then use numbers.Float etc., this PEP proposes a straightforward shortcut that is almost as effective: when an argument is annotated as having type float, an argument of type int is acceptable; similar, for an argument annotated as having type complex, arguments of type float or int are acceptable. This does not handle classes implementing the corresponding ABCs or the fractions.Fraction class, but we believe those use cases are exceedingly rare.

This is a very useful passage to link to, because:

  • It clearly (albeit tersely) states that the PEP-3141 ABCs are problematic
  • It clearly states the separate solution that PEP-484 proposes for dealing with numeric types
  • It frames the PEP-484 solution in opposition and contrast to the PEP-3141 solution

The parallel passage in the typing spec currently states this:

Python’s numeric types complex, float and int are not subtypes of each other, but to support common use cases, the type system contains a straightforward shortcut: when an argument is annotated as having type float, an argument of type int is acceptable; similar, for an argument annotated as having type complex, arguments of type float or int are acceptable.

Since PEP-484 is a historical document rather than a piece of living documentation, it would be great if the typing spec could state as clearly as PEP-484 that the PEP-3141 ABCs are not the recommended way of annotating numeric types in Python, and that type checkers may not necessarily (and in fact probably won't ever) support them.

貢獻指南

這個儲存庫沒有索引到貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

從 typing spec 的「Special cases for float and complex」頁面開始,將其措辭與連結的 PEP 484 和 PEP 3141 相關段落進行比較。明確說明 PEP 3141 的 ABCs 不是建議使用的數值註釋,而且型別檢查器可能不支援它們;更新後的段落應保留現有的數值快捷寫法說明。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
documentation
Issue 類型
文件
難度
2/5
預估耗時
1-3 小時
活躍度
停滯
描述清晰度
描述清楚
新手友好度
38/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。