class 'Runattr' 的未解析属性引用 'cfg'

Unresolved attribute reference 'cfg' for class 'Runattr'

我声明了一个 class 如下:

class Runattr:
    pass

run = Runattr()
run.cfg = 'some str'

当我试图在我的代码中进一步访问 run.cfg 时,PyCharm 给了我以下警告并且我无法自动完成 run.cfg:

未解析的属性引用 'cfg' for class 'Runattr' 检查信息:此检查检测应解析但未解析的名称。由于动态调度和鸭子类型,这在有限但有用的情况下是可能的。顶级项目和 class 级项目比实例项目得到更好的支持。

我是 classes 的新手。有人能告诉我为什么会看到这个警告吗?可以修改它来消除警告吗?

您必须在名为 cfg 的字段上声明

class Runattr:
    cfg = ''

run = Runattr()
run.cfg = 'some str'

这只是一个 PyCharm 警告(不是错误!),因为它无法确定 class 是否真的应该有一个 cfg属性。

假设您使用的是现代 Python 版本,请为此类字段添加注释:

class Runattr:
    cfg: str  # denotes there would/could be a string `cfg`

run = Runattr()
run.cfg = 'some str'

类 并且实例仍然可以具有任何属性(见鬼,你甚至可以 setattr(run, "oh this is fun", True) 来拥有一个不是有效 Python 标识符的属性),只是 IDE不能对这里的动态性质无限聪明。