跳到内容

private-type-parameter (UP049)

0.12.0 版本中加入 · 相关问题 · 查看源码

源自 pyupgrade linter。

有时提供修复。

作用

检查通用类和函数中带有前导下划线的 PEP 695 类型参数的使用情况。

为什么这不好?

PEP 695 类型参数的作用域本身就被限制在其出现的类或函数内部,因此前导下划线不仅无法提供常规的隐私保护,反而会降低可读性。

不过,对于“单下划线”(如 _T_)或“双下划线”(如 __T__)形式的类型参数名称,将不会触发诊断或自动修复,因为这些名称不被视为私有名称。

示例

class GenericClass[_T]:
    var: _T


def generic_function[_T](var: _T) -> list[_T]:
    return var[0]

建议改为

class GenericClass[T]:
    var: T


def generic_function[T](var: T) -> list[T]:
    return var[0]

修复可用性

如果去除下划线后的名称会遮蔽内置函数或其他变量、属于关键字,或者在其他情况下成为无效标识符,则无法提供自动修复。在这种情况下,你可以考虑使用后缀下划线或完全换一个名称来满足该 Lint 规则。

另请参阅

该规则会重命名私有的 PEP 695 类型参数,但不会将非 PEP 695 的泛型转换为新格式。请参阅 non-pep695-generic-functionnon-pep695-generic-class 以了解执行此转换的规则。由于这些规则在转换后不会移除未使用的类型变量,你可能还需要考虑启用 unused-private-type-var 来完成向 PEP 695 泛型的过渡。