我试图找出在此函数顶部放入我的类型注释的内容。
我有以下简单的例子:
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'>
。这似乎不适用于类型提示,因为它有一个空格。 the documentation中列出的预期结果为编辑:这里的文档不正确。WindowObject
。我无法在curses模块中找到WindowObject的路径。
如何使用准确的类型注释编写main?
答案 0 :(得分:2)
不幸的是,curses模块似乎没有在typeshed中完全输入。几个月前有一些preliminary work done,但Windows对象尚未添加。您可以自己检查Python 3'curses'存根here和here。
目前,存根默认键入curses.wrapper
为:
def wrapper(func, *args, **kwds): ...
......反过来,相当于:
def wrapper(func: Callable[..., Any], *args: Any, **kwds: Any): ...
因此,这意味着除了main
之外,目前确实没有合适的类型可以分配给Any
函数的参数。
那就是说,如果你想要它,你可能会贡献一些存根来自己完成curses
模块!看起来Window object似乎并不那么复杂,并且希望打字相对简单。
如果curses模块本身不存在,那么主要的复杂因素可能是确定应该从哪里导入'Window'对象。您可能希望将“Windows”对象放在typing
模块本身中,就像typing.re.Pattern
and typing.re.Match
一样。
答案 1 :(得分:1)
你的问题是,你认为的类型不是对象的真实类型,方法类型()总是正确地告诉你类型,所以确定文档。是错的。