跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 这句话的翻译是?(PEP585)
未分類
14 11 月 2020

这句话的翻译是?(PEP585)

这句话的翻译是?(PEP585)

資深大佬 : imn1 3

手册中:
class typing.Iterable(Generic[T_co])
A generic version of collections.abc.Iterable.
Deprecated since version 3.9: collections.abc.Iterable now supports []. See PEP 585.

后面这句指的是 3.9 弃用 collections.abc.Iterable,还是弃用 typing.Iterable ?
它用逗号我理解是弃用 typing.Iterable,用冒号我就糊涂了

PEP585 中有这句:
This PEP proposes to enable support for the generics syntax in all standard collections currently available in the typing module.

PEP585 太长,英语不佳

其实一直对多个模块( types, collections, typing 等)重复的类型定义不解,不知道下面这样理解对不对?
多个模块对于类型的定义,依据 PEP585 弃用,转到 typing 模块去归一定义

还是要反向理解,而 typing 模块只着重于处理方法,定义由其他模块完成

希望是用 typing 归一,判断一个类型要 import 好几个模块真是累

大佬有話說 (10)

  • 資深大佬 : aijam

    先回答你的问题:
    > 后面这句指的是 3.9 弃用 collections.abc.Iterable,还是弃用 typing.Iterable?
    弃用 typing.Iterable
    > 转到 typing 模块去归一定义
    不对,是反过来:3.9 之后 typing 里很多和标准库本来就有的重复的东西被 deprecate 了
    ————————————————————————————
    3.9 之前,你写 list of string 的 type annotation 需要写”var: typing.List[str]”。
    3.9 之后,你直接用 builtin 的类型 list,只需要写”var: list[str]”,不需要 import typing 。
    基本改革方向就是:“如果标准库里有这个类型了,就不用在 typing 里专门为了 type annotation 又重复定义一个了”。所以,标准库里本来就有 collections.abc.Iterable,它是 list, tuple, dict 等共同的抽象父类,所以没必要保留 typing.Iterable 了。

  • 資深大佬 : xiaolinjia

    我判断类型从来不用 typing 的模块,只用 collections.abc 。
    写类型注解的时候才用 typing

  • 資深大佬 : xiaolinjia

    py36,刚试了下,collections.abc 的 Sequence 等容器不能在类型注解的时候写成 Sequence[str]啊。只有 typing 下的 Sequence 才可以写成 Sequence[str]。

  • 主 資深大佬 : imn1

    @aijam
    明白了
    collections.abc.Iterable now supports [] ➡️ collections.abc.Iterable 开始支持子类型
    刚才还没想明白这个方括号指什么……

  • 主 資深大佬 : imn1

    @xiaolinjia #3
    以粗陋的英语能力理解,是需要带__class_getitem__()魔术方法,而这个是 py3.9 加入的

  • 資深大佬 : aijam

    @imn1 这玩意儿不叫子类型,叫 parameterized generics

  • 主 資深大佬 : imn1

    @aijam #6
    对,我只是词穷,随手写,

  • 資深大佬 : xiaolinjia

    @imn1 不知道我的理解对不对。我现在的想法是,py36 的时候,还没有抽象出__class_getitem__()魔术方法,这时,如果在类型注解中使用 collections.abc.Sequence[str]时,ide 会提示 type 类没有定义__getitem__魔术方法,所以注解失败。(因为 collections.abc.Sequence 是 type 类的实例)。
    然后 py37 的时候,出现了__class_getitem__魔术方法这个接口,但是内置的类型比如 list,还是没有定义了__class_getitem__这个方法。直到 py39 的时候,内置类型 list 才定义了这个方法,使得 list[str]也能用于注解了。

  • 主 資深大佬 : imn1

    @xiaolinjia #8
    我反正感觉 py39 要改一波代码,现在没写 type hint 还好说……

    另外想写个类型相关的装饰器,用来临时检查也好,实用类型转换也好,如果 typing 相关在 3.9 弃用,就要重新考虑怎么写了,今天主要想搞清这个问题

  • 資深大佬 : xiaolinjia

    @imn1 刚咨询了下大佬,从 37 引入__class_getitem__方法开始,就可以通过 from__future__ import annotations 来使用 a: list[str] = [‘a’]了。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具