Python Mypy可调用类型在类中似乎不起作用
我试图对作为参数传递的回调函数/方法使用类型暗示。 请参见下面的示例。 “基于函数”的实现工作正常:Mypy报告预期的错误Python Mypy可调用类型在类中似乎不起作用,python,mypy,Python,Mypy,我试图对作为参数传递的回调函数/方法使用类型暗示。 请参见下面的示例。 “基于函数”的实现工作正常:Mypy报告预期的错误 error: Argument 1 to "main_with_callback" has incompatible type "Callable[[], Any]"; expected "Callable[[str], Any]" 如果我在课堂上也这么做。未报告该错误。似乎只对可调用的定义的返回类型求值。 我看
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_
在任何函数之外,因此默认情况下对此执行静态类型检查。但是callself.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