gpt4 book ai didi

python - 为弱引用对象列表定义 python 类型提示

转载 作者:行者123 更新时间:2023-12-03 14:10:39 25 4
gpt4 key购买 nike

我还没有找到在使用弱引用时如何给出类型提示指示。

from typing import List
import weakref
class MyObject:
def __init(self, foo)
self.foo = foo
o1 = MyObject(1)
o2 = MyObject(2)
my_list: List[weakref] = [weakref.ref(o1), weakref.ref(o2)]

有没有办法说 my_listlistweakrefMyObject , 就像是:
my_list: List[Weakref[MyObject]] = [weakref.ref(o1), weakref.ref(o2)]

?

最佳答案

我们可以通过咨询 typeshed 找到这些信息,标准库和一些流行的 3rd 方模块的类型提示库。

具体来说,如果我们查看 weakref module 的 stub ,我们可以看到它重新导出ref来自 _weakref module .从那里,我们看到 ref被定义为等同于 ReferenceType类,它被定义为泛型(并且也从 weakref 重新导出)。

将这些部分放在一起,我们可以为您提供my_list变量类型提示,如下所示:

from __future__ import annotations
from typing import List
from weakref import ref, ReferenceType

# ...snip...

my_list: List[ReferenceType[MyObject]] = [...]

有点有趣的是,这样做也可以:
from __future__ import annotations
from typing import List
from weakref import ref

# ...snip...

my_list: List[ref[MyObject]] = [...]

基本上, ref也是 ReferenceType 的别名所以我们可以互换使用这两种类型。

我个人会使用 ReferenceType ,但这主要是因为我习惯于以大写字母开头的类型。 (或者,如果该类型提示开始变得过于冗长,我可能会定义一个自定义类型别名 Ref = ReferenceType )。

请注意 from __future__ import annotations行仅在 Python 3.7+ 上可用。如果您使用的是旧版本的 Python,则需要手动将类型提示设为字符串:
from typing import List
from weakref import ref

# ...snip...

my_list: "List[ReferenceType[MyObject]]" = [...]

# Or:

my_list: List["ReferenceType[MyObject]"] = [...]

关于python - 为弱引用对象列表定义 python 类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52528269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com