【问题标题】:PyCharm warns "unresolved attribute reference" when using __subclasses__() despite having the attribute defined in the base class尽管在基类中定义了属性,但 PyCharm 在使用 __subclasses__() 时会警告“未解析的属性引用”
【发布时间】:2020-01-23 17:48:27
【问题描述】:

运行以下:

class Base:
    x = 1

class A(Base):
    pass

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

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

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

我缺少什么,我应该如何修改我的代码?

【问题讨论】:

标签: python attributes pycharm warnings subclass


【解决方案1】:

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

我经常发现 PyCharm 在元类方面并不是很好 - 而__subclasses__ 是一种元类方法。

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

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

但是 PyCharm 在您的示例中以某种方式将其解决为 List[type] 而不是正确的 List[Base]。所以Base.__subclasses__()[0] 具有“推断类型”type,并且因为type 没有属性x,它会将访问报告为“未解决”。

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

【讨论】:

  • List[Base] -> List[Type[Base]]
猜你喜欢
  • 2019-01-10
  • 2018-06-08
  • 2021-09-30
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多