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 的缺点,不是你的代码。
运行 如下:
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 的缺点,不是你的代码。