我试图找出要在此函数顶部的类型注释中添加什么。
我有以下简单的示例:
import curses
def main(stdscr):
stdscr.clear()
stdscr.addstr(2, 0, "What is the type of stdscr?")
stdscr.addstr(5, 0, "It is: {}".format(type(stdscr)))
stdscr.refresh()
stdscr.getkey()
curses.wrapper(main)
这将返回
<type '_curses.curses window'>
。这似乎无法与Type提示一起使用,因为其中带有空格。预期的结果将是the documentation中列出的WindowObject
。我在curses模块本身中找不到WindowObject的路径。编辑:这里的文档不正确。如何使用正确的类型注释编写main?
最佳答案
不幸的是,curses模块似乎在排版中未完全键入。几个月前有一些preliminary work done,但尚未添加Windows对象。您可以自己检查pythont 3'curses' stub here和here。
当前, stub 默认将curses.wrapper
键入为:
def wrapper(func, *args, **kwds): ...
...依次相当于:
def wrapper(func: Callable[..., Any], *args: Any, **kwds: Any): ...
因此,这意味着除
main
之外,目前确实没有合适的类型可以分配给Any
函数的参数。就是说,如果您愿意的话,您也许可以贡献一些 stub 来自己完成
curses
模块! Window object似乎并不复杂,应该可以相对简单地键入。如果curses模块本身中不存在“主要对象”,那么最主要的问题可能就是敲定应该从何处确切地导入“Window”对象。您可能想要将``Windows''对象粘贴在
typing
模块本身内,就像 typing.re.Pattern
and typing.re.Match
一样。关于诅咒的Python类型提示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43988372/