跳到内容

将命名元组函数式转换为类 (UP014)

源自 pyupgrade linter。

有时提供修复。

作用

检查使用函数式语法的 NamedTuple 声明。

为什么这不好?

NamedTuple 子类可以通过函数式语法 (Foo = NamedTuple(...)) 或类语法 (class Foo(NamedTuple): ...) 定义。

类语法更易读,通常比函数式语法更受欢迎,函数式语法主要用于向后兼容 collections.namedtuple

示例

from typing import NamedTuple

Foo = NamedTuple("Foo", [("a", int), ("b", str)])

建议改为

from typing import NamedTuple


class Foo(NamedTuple):
    a: int
    b: str

修复安全性

如果 NamedTuple 定义的范围内有任何注释,则此规则的修复被标记为不安全,因为这些注释将被自动修复删除。

参考