来自私有导入的Python类型注释(来自curses)

时间:2020-03-08 12:56:06

标签: python types curses mypy

我刚刚开始使用类型注释,并在Python中使用curses模块遇到了一个问题。更具体地说,curses.wrapper(func)期望函数func作为参数,并将主窗口(也称为“ stdscr”)作为参数。但是,我不确定如何注释这种功能。例如

from curses import wrapper

def interactive_shell_curses(stdscr: _curses.window) -> None:

即使print(type(stdscr))打印<class '_curses.window'>,也会产生错误“未定义名称'_curses'”。在_curses.window文件中找到了_curses.pyi。但是,我不确定如何导入它,甚至不确定。另外,我不确定这里的最佳实践是否实际上是避免注释interactive_shell_curses

请咨询如何处理此案!

1 个答案:

答案 0 :(得分:2)

Python curses模块只是curses库的包装。特别是,这意味着您将无法出于键入目的访问窗口对象(_curses.window仅在调用initscr()之后才可用,即使这样做,也将毫无用处,因为库本身不提供类型提示。

另一方面,您不能仅从_CursesWindow的{​​{1}}导入typeshed类型的提示,因为它不是在运行时定义的。这就是TYPE_CHECKING常量可以提供帮助的地方。如果_curses.pyiTYPE_CHECKING,则您处于类型检查模式,并从存根导入类型提示。否则,您将使用不关心类型提示的解释器运行代码,例如使用True类型。示例:

Any