我试图找出要在此函数顶部的类型注释中添加什么。

我有以下简单的示例:

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 herehere

当前, 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/

10-15 17:36