问题描述
我声明了一个类如下:
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 不能对动态特性无限聪明在这里。