当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python typing.TypedDict用法及代码示例


用法:

class typing.TypedDict(dict)

向字典添加类型提示的特殊构造。在运行时,它是一个普通的 dict

TypedDict 声明了一个字典类型,它期望它的所有实例都有一组特定的键,其中每个键都与一个一致类型的值相关联。这种期望不会在运行时检查,但仅由类型检查器强制执行。用法:

class Point2D(TypedDict):
    x: int
    y: int
    label: str

a: Point2D = {'x': 1, 'y': 2, 'label': 'good'}  # OK
b: Point2D = {'z': 3, 'label': 'bad'}           # Fails type check

assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')

允许在不支持的旧版本 Python 中使用此函数PEP 526,TypedDict支持另外两种等效的句法形式:

Point2D = TypedDict('Point2D', x=int, y=int, label=str)
Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})

当任何键不是有效的标识符和关键字时,也应该使用函数语法,例如因为它们是关键字或包含连字符。例子:

# raises SyntaxError
class Point2D(TypedDict):
    in: int  # 'in' is a keyword
    x-y: int  # name with hyphens

# OK, functional syntax
Point2D = TypedDict('Point2D', {'in': int, 'x-y': int})

默认情况下,所有键都必须存在于 TypedDict 中。可以通过指定整体来覆盖它。用法:

class Point2D(TypedDict, total=False):
    x: int
    y: int

这意味着 Point2D TypedDict 可以省略任何键。类型检查器仅应支持文字 FalseTrue 作为 total 参数的值。 True 是默认值,它使类主体中定义的所有项都成为必需项。

TypedDict 类型可以使用基于类的语法从一个或多个其他 TypedDict 类型继承。用法:

class Point3D(Point2D):
    z: int

Point3D 具有三个项目: xyz 。它等价于这个定义:

class Point3D(TypedDict):
    x: int
    y: int
    z: int

TypedDict 不能从非 TypedDict 类继承,特别是包括 Generic 。例如:

class X(TypedDict):
    x: int

class Y(TypedDict):
    y: int

class Z(object): pass  # A non-TypedDict class

class XY(X, Y): pass  # OK

class XZ(X, Z): pass  # raises TypeError

T = TypeVar('T')
class XT(X, Generic[T]): pass  # raises TypeError

TypedDict 可以通过注解字典(有关注解最佳实践的更多信息,请参阅注解最佳实践)、__total____required_keys____optional_keys__ 进行自省。

参看PEP 589更多示例和详细使用规则TypedDict.

3.8 版中的新函数。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 typing.TypedDict。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。