类“Runattr”的未解析属性引用“cfg”

问题描述

我声明了一个类如下:

class Runattr:
    pass

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

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

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

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

解决方法

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

class Runattr:
    cfg = ''

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

这只是 PyCharm 警告(不是错误!),因为它无法确定该类是否真的应该具有 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 不能对动态特性无限聪明在这里。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...