无法使用mypy将类(类型为“Any”)子类化为“QObject”

13

我有一个继承QObject的类。一切都运行良好,但是当我在其上运行mypy时,会出现以下错误:

"error: Class cannot subclass 'QObject' (has type 'Any')" 

目前我完全被卡住了。我一直在阅读mypy文档,但找不到错误所在。

这里是代码:

from PyQt5.QtCore import QObject

class ServiceLocator(QObject):

    def __init__(self) -> None:
        super().__init__()
        ...

欢呼。

从未使用过mypy。但是->看起来有点奇怪。初始化程序不返回任何内容。 - deets
2
抱歉,但您是错误的。__ init __需要返回None。实际上,在这种情况下它确实会隐式地返回None。 - Notbad
刚看到了 - 是的。就像我说的,我不是用户。祝你好运 :) - deets
1
请看一下这个问题,它似乎与你的问题相同:https://github.com/python/mypy/issues/4180,与访问其他文件中的模块有关。Guido说:“你需要告诉mypy检查两个文件。” - Lindsay Ward
这对我有所帮助。虽然没有解决我的问题,但让我达到了一个“解决方案”。 - Notbad
3个回答

16

当 mypy 没有一个类的类型信息时,会出现这个错误(在您的情况下是由于缺少存根文件)。同时您使用了 --disallow-subclassing-any。您可以关闭此标志、添加类型信息,或者像您指出的那样,添加 # type: ignore 来消除该错误。


8
为了记录我是如何解决这个问题的,我将回答自己的问题。正如前面的评论所建议的那样,错误的原因是 mypy 没有关于 QObject 的信息。我尝试将来自此处第三方文件夹中的.pyi文件添加到mypy中,或者你可以尝试从源代码构建PyQt5。一切都顺利进行,但是出现了许多其他错误,所以我最终决定使用:
#type: ignore

在这些代码行上进行修改并消除错误,直到类型提示对此库的支持更加完善。

干杯。


2
"直到类型提示对此库得到更好的支持" - 如果您拥有该库,您会如何修复它? - marengaz

0

我在一个完全类型化的库中遇到了这个问题。问题是这些对象在库的__all__变量中没有被定义为公共的(doc)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接