Python类型提示与诅咒

时间:2017-05-15 20:35:05

标签: python python-3.5 python-3.6 type-hinting python-curses

我试图找出在此函数顶部放入我的类型注释的内容。

我有以下简单的例子:

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?

2 个答案:

答案 0 :(得分:2)

不幸的是,curses模块似乎没有在typeshed中完全输入。几个月前有一些preliminary work done,但Windows对象尚未添加。您可以自己检查Python 3'curses'存根herehere

目前,存根默认键入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)

你的问题是,你认为的类型不是对象的真实类型,方法类型()总是正确地告诉你类型,所以确定文档。是错的。