pycharm 代码完成不适用于 SimpleNamespace

pycharm code completion does not work for SimpleNamespace

为什么 SimpleNamespace 代码完成在 pycharm 编辑器中不起作用?

from types import SimpleNamespace
sn= SimpleNamespace(param_a = '1')
sn.   # pressing '.' dot I'm NOT offered param_a

这在 pycharm python 控制台中确实有效,表明 SimpleNamespace 实例必须以某种方式首先在运行时 'computed'。但是,如果 SimpleNamespace 的目的是提供一个 命名空间 ,对一些参数进行分组并通过点符号访问它们,那么,虽然从技术上讲我仍然可以手动键入 sn.param_a,无需代码完成是整个事情剥夺了它的大部分用处,我可能会切换到普通 class,其中代码完成在编辑器中工作(class 实例化或未实例化)尝试不同的 machines\pycharm 版本所以看起来不像我的环境的一些怪癖。

Why SimpleNamespace code completion does not work in pycharm editor?

因为 PyCharm 没有足够的智慧来专门处理 SimpleNamespaces(即知道 kwargs 只是分配给实例属性)。

This does work in pycharm python console, suggesting SimpleNamespace instance must be somehow 'computed' at runtime first

是的,控制台对活动对象执行 vars()dir() 之类的操作以对其进行内省。静态代码分析与在运行时检查对象完全不同。

实例在运行时不以任何特殊方式“计算”。

I'd likely switch to plain class where code completion does work in editor (class instantiated or not)

为简洁起见,您可能希望使用 dataclasses(或 attrs);两者都得到 PyCharm.

的大力支持