JetBrains 宣布,PyCharm 2026.2 发布线包含 263 项修复和改进,其中很大一部分集中于开发环境理解 Python 代码的方式。这些变化包括更准确的类型推断、更少的误报、更合适的自动补全,以及导入和重构方面的改进。
该公司表示,这些调整针对的是日常工作中出现的细节,尤其是在使用现代类型和常见框架时,而不是推出一个独立的主要功能。
更准确地支持 SQLAlchemy 2.0
此次更新解决了一系列与 SQLAlchemy 2.0 相关的问题,这些问题此前会导致误报。PyCharm 现在能够正确处理 Mapped[...] 中对类的字符串引用,并将 Session.get() 返回的类型推断为模型对象或 None 值,而不是将其解释为类本身的类型。
编辑器现在还能够识别使用 @name.inplace.setter 的现代 hybrid_property 属性设置器,并处理通过 mixins 继承的模型类属性,从而减少创建对象时有关意外参数的报告。
改进类型推断和执行路径分析
JetBrains 修复了分析器错误地声明某段代码不可达,或在经过循环后丢失类型收窄的情况。在使用 isinstance 检查 int | float 这样的数字联合类型时,else 分支不再被视为不可达;在 while 循环中也会继续正确地进行类型收窄。
修复内容还包括:在使用解包和星号表达式时保留类型信息;修正 /= 等增强赋值产生的类型;改进对 Self 以及使用 __new__、__init__ 或 metaclass __call__ 的构造器结果的处理。
在枚举中,.value 和 .name 现在会被推断为精确的 Literal 类型,而不是扩展为 str 或 int。此外,还可以根据装饰器施加的约束推断被装饰函数的参数类型,而不是将其赋予通用的 Any 类型。
更实用的导入和自动补全
自动导入现在会重新使用已经导入的模块,而不是建议再次导入相同模块。如果模块已经可用,PyCharm 会优先通过限定名称引用它;同时还增加了对嵌套类自动导入的支持。
字符串形式的 unittest.mock.patch() 目标现在可以自动补全包含模块、类和属性的路径。此外,重写内置函数或 dunder 函数时,自动补全会填充完整的带注解签名,并自动导入所需类型。
实际会有哪些变化?
这些改进减少了开发者检查错误警告,或修正导入和自动补全建议所需的时间。行内类型提示现在可以点击以跳转到类型定义,这也有助于直接在使用位置理解泛型类型的结果。
此次更新还增加了对 f-string 格式语法的检查,可以检测不受支持的格式说明符,或未实现 __format__ 的类型。在重构方面,重命名模块现在也会更新相关引用和导入语句。此外,Refactor | Field 操作已更名为 Attribute,以便与 Python 关于对象属性的术语保持一致。