convert-typed-dict-functional-to-class (UP013)
源自 pyupgrade linter。
有时提供修复。
作用
检查使用函数式语法的 TypedDict
声明。
为什么这不好?
TypedDict
类型可以通过函数式语法 (Foo = TypedDict(...)
) 或类语法 (class Foo(TypedDict): ...
) 定义。
类语法更具可读性,通常优于函数式语法。
但是,在某些情况下,不可能使用基于类的语法。此规则不适用于这些情况。 也就是说,如果任何 TypedDict
字段是以下情况,则无法使用基于类的语法:
- 不是有效的 python 标识符(例如,
@x
) - Python 关键字,例如
in
- 私有名称,例如
__id
,如果使用基于类的语法,这些名称将在运行时进行名称修饰 - Dunder 名称,例如
__int__
,如果与基于类的语法一起使用,可能会混淆类型检查器。
示例
建议改为
修复安全性
如果 TypedDict
定义的范围内有任何注释,则此规则的修复被标记为不安全,因为自动修复将删除这些注释。