我想编写在多个平台上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 类型检查的替代类型签名?