Pycharm 检查未标记从存根对象继承的类中未解析的引用

Posted

技术标签:

【中文标题】Pycharm 检查未标记从存根对象继承的类中未解析的引用【英文标题】:Pycharm inspection not flagging unresolved references in classes inherited from a stubbed object 【发布时间】:2021-08-27 07:28:34 【问题描述】:

我在 PyCharm(Professional 2020.3)中做了很多 PySide2 开发。

我安装了 PySide2 的存根文件,这给了我很好的自动完成功能,但不知何故,它在一些相当明显的情况下无法检测到未解析的引用。

看这个截图:

从任何具有实际 python 定义的类继承时,一切都很好,但是当父类来自存根 (pyi) 文件时,它似乎没有检测到引用未解析。存根文件 self.missing 中没有任何地方定义(并且它以任何名称发生)。

我已经在网上搜索了一段时间,但我能找到的只是人们抱怨 pycharm 将太多东西标记为缺少引用,而这种情况下它标记得不够多。

是否有特殊设置可以设置在某处?是否需要以不同方式编写的pyi文件的微妙之处?或者可能是 PyCharm 错误?

【问题讨论】:

QWidget 或任何 StubbedTest 祖先是否定义了 __getattr__ 函数? 是的,其中一个父类有:def __getattr__(self, name: str) -> typing.Any: ... 就是这个原因。由于__getattr__ 可以提供额外的属性,PyCharm 在这种情况下会禁用未解析的引用检查。 我已经在存根文件中评论过,我会看看是否这样做。 【参考方案1】:

正如 cmets 中的 user2235698 所暗示的,其中一个存根对象 (QObject) 已重新实现 __getattr__,这导致 Pycharm 接受任何正确的属性。

从 .pyi 文件中删除这一行对问题进行了排序。

【讨论】:

以上是关于Pycharm 检查未标记从存根对象继承的类中未解析的引用的主要内容,如果未能解决你的问题,请参考以下文章

在 JAXB 生成的类中未设置默认布尔值

python继承

如何从包含的类中执行函数

“SQLAlchemy”类中未解析的属性“Column”

ViewModel 类中未设置对象,控制直接从数据访问类移动到 View

PyCharm 的需求警告中未列出软件包