PyCharm 在使用 __subclasses__() 时警告 "unresolved attribute reference" 尽管在基础 class 中定义了属性

PyCharm warns "unresolved attribute reference" when using __subclasses__() despite having the attribute defined in the base class

运行 如下:

class Base:
    x = 1

class A(Base):
    pass

y = Base.__subclasses__()[0].x

按预期生成 y=1。但是,PyCharm 警告我最后一行:

由于所有子类都继承自Base,它们必须包含x属性,因此我认为PyCharm解析x是显而易见的。我编写此代码的初衷是遍历所有子类并找到具有适当属性值的子类。 我一直在搜索相关问题,但找不到更好的方法。

我错过了什么,我应该如何修改我的代码?

在这种情况下:只需忽略该警告即可。

我经常发现 PyCharm 对于元类来说并不是很好 - 而 __subclasses__ 是一种元类方法。

在您的特定情况下:PyCharm 使用带有 following definition 的类型:

class type(object):
    ...
    def __subclasses__(self: _TT) -> List[_TT]: ...
    ...

但是 PyCharm 以某种方式将您的示例中的此问题解析为 List[type] 而不是正确的 List[Base]。所以 Base.__subclasses__()[0] 有 "inferred type" type 并且因为 type 没有属性 x 它报告访问为 "unresolved".

但那是 PyCharm 的缺点,不是你的代码。