小编Nic*_*tje的帖子

asyncio 事件循环的平台无关的 mypy 类型注释是什么?

我想编写在多个平台上mypy使用和工作的类型化代码asyncio。具体来说,我经常有显式绑定到事件循环的类和方法。我想为事件循环提供类型注释。

asyncio当我检查Linux 上的事件循环类型时,我得到:

>>> import asyncio
>>> type(asyncio.get_event_loop())
<class 'asyncio.unix_events._UnixSelectorEventLoop'>
Run Code Online (Sandbox Code Playgroud)

这种类型显然与 Unix/Linux 平台相关。

现在,我可以编写使用以下类型显式键入事件循环的代码:

>>> import asyncio
>>> type(asyncio.get_event_loop())
<class 'asyncio.unix_events._UnixSelectorEventLoop'>
Run Code Online (Sandbox Code Playgroud)

但您会注意到,我必须# type: ignore在导入中包含一个标签_UnixSelectorEventLoop,因为asyncio.unix_events没有类型存根。我还犹豫是否要导入一个私有方法,如类名开头的下划线所示。

作为替代方案,我可以使用AbstractEventLoop以下类型:

import asyncio
from asyncio.unix_events import _UnixSelectorEventLoop  # type: ignore
def func(loop: _UnixSelectorEventLoop) -> None:
    print(loop)
func(asyncio.get_event_loop())
Run Code Online (Sandbox Code Playgroud)

这成功地通过了 mypy 类型检查。我犹豫是否用作AbstractEventLoop我的类型,因为它是一个抽象类型。

是否存在跨平台工作、不需要使用抽象类定义并通过 mypy 类型检查的替代类型签名?

python type-hinting python-asyncio mypy

11
推荐指数
1
解决办法
2346
查看次数

标签 统计

mypy ×1

python ×1

python-asyncio ×1

type-hinting ×1