non-pep695-generic-class (UP046)
源自 pyupgrade linter。
有时提供修复。
作用
检查在泛型类中使用独立的类型变量和参数规范。
为什么这不好?
Python 3.12 通过 PEP 695 引入了特殊的类型参数语法,用于定义泛型类。这种语法更易于阅读,并为泛型提供了更简洁的支持。
已知问题
该规则目前跳过嵌套在其他函数或类中的泛型类。它还会跳过 Python 3.13 中实现的 PEP 696 中引入的带有 default
参数的类型参数。
只有当类定义中的所有泛型类型都在当前模块中定义时,此规则才能提供修复。对于外部类型参数,会发出诊断,但不提供建议的修复。
并非所有类型检查器都完全支持 PEP 695,因此即使此规则建议的有效修复也可能导致类型检查 失败。
修复安全性
此修复被标记为不安全,因为 PEP 695 对类型参数使用推断的变异,而不是 TypeVar
变量使用的 covariant
和 contravariant
关键字。因此,将 TypeVar
变量替换为内联类型参数可能会改变其变异。
示例
建议改为
另请参阅
此规则替换类中的独立类型变量,但即使在修复后未使用,也不会删除相应的类型变量。有关清理未使用的私有类型变量的规则,请参阅 unused-private-type-var
。
此规则不会重命名私有类型变量以删除前导下划线,即使新的类型参数的范围仅限于其关联的类。有关更新这些名称的规则,请参阅 private-type-parameter
。
此规则将正确处理具有多个基类的类,只要单个 Generic
基类位于参数列表的末尾,如 generic-not-last-base-class
所检查的那样。如果在最后一个位置之外找到 Generic
基类,则会发出诊断,但不提供建议的修复。
此规则仅适用于泛型类,不包括泛型函数。有关函数版本,请参阅 non-pep695-generic-function
。