Python 3.8 引入了TypedDict应该用于输入 dict 对象的类:
from typing import TypedDict
class MyDict(TypedDict):
name: str
type(MyDict(name='foo'))
# dict
Run Code Online (Sandbox Code Playgroud)
这里的问题是,由其创建的最终对象TypedDict是一个dict类型对象,并且丢失了对原始创建类的任何类型的引用MyDict。
换句话说,type(MyDict(name='foo'))应该生成dict对象而不是MyDict对象。
是否可以修补TypedDict此功能?dict或者,也许在生成的对象中我缺少对原始类的引用?
一旦按照PEP-589TypedDict实例化 a和 a,就不可能区分 a和 aDict
特别是,TypedDict 类型对象不能用于
isinstance()诸如isinstance(d, Movie). 原因是目前不支持检查字典项值的类型,因为它isinstance()不适用于许多PEP 484类型,包括List[str].
查看CPython 实现,我们可以看到TypedDict返回_TypedDictMeta结果为dict.
归根结底,它是 a 的语法糖dict:
'TypedDict', # Not really a type.
Run Code Online (Sandbox Code Playgroud)
调用时,TypedDict 类型对象在运行时返回一个普通的字典对象:
print(type(m)) # <class 'dict'>