Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Mypy可调用类型在类中似乎不起作用_Python_Mypy - Fatal编程技术网

Python Mypy可调用类型在类中似乎不起作用

Python Mypy可调用类型在类中似乎不起作用,python,mypy,Python,Mypy,我试图对作为参数传递的回调函数/方法使用类型暗示。 请参见下面的示例。 “基于函数”的实现工作正常:Mypy报告预期的错误 error: Argument 1 to "main_with_callback" has incompatible type "Callable[[], Any]"; expected "Callable[[str], Any]" 如果我在课堂上也这么做。未报告该错误。似乎只对可调用的定义的返回类型求值。 我看

我试图对作为参数传递的回调函数/方法使用类型暗示。 请参见下面的示例。 “基于函数”的实现工作正常:Mypy报告预期的错误

error: Argument 1 to "main_with_callback" has incompatible type "Callable[[], Any]"; expected "Callable[[str], Any]"
如果我在课堂上也这么做。未报告该错误。似乎只对
可调用的
定义的返回类型求值。 我看不出有什么不对劲。有人有什么建议吗

输入import Callable,任意
#以回调作为参数的函数。
def callback():
打印(“任何参数”)
def main_与_回调(回调:可调用[[str],Any]):
回调(“这是回调”)
带回调的主回调(回调)
#使用回调作为参数初始化。
A类:
定义初始化(自):
self.main_与_回调(self.the_回调)
def main_与_callback(self,_callback:Callable[[str],Any]):
_回调(“这是回调”)
定义_回调(self):
印刷品(“被称为”)
a=a()
Mypy说:

没有任何注释(无论是参数还是返回类型)的函数都不会进行类型检查

换言之:

函数注释中没有任何显式类型的函数体是动态类型的(在运行时检查操作)。默认情况下,函数外部的代码是静态类型的,并且会推断变量的类型

带有_callback的调用
main_
在任何函数之外,因此默认情况下对此执行静态类型检查。但是call
self.main\u with_callback
在未注释的
\uuuuu init\uuuuu
函数中,并为此动态类型执行检查

要启用
内部代码的静态类型检查,可以
为
\uuuu init\uuuuu
添加一些注释,或使用所述的mypy命令行选项,例如
--检查非类型化的defs

class A:
    def __init__(self) -> None:
        self.main_with_callback(self.the_callback) # error
        reveal_type(self.the_callback)

好啊谢谢我希望mypy解决的问题是,当我创建一个没有必需(事件)参数(wxpython callback)的回调时。我想,阅读你的答案,如果不添加额外的内容是不可能的。我还发现pyright(来自vscode pylance)确实解决了这个问题。谢谢您可以使用
-disallow untyped calls
-disallow untyped defs
或类似方法之一获取
mypy
来检查这些属性;请参阅mypy文档中的[Untyped definitions and calls]。使用
--检查Untyped defs