是否可以获取用于创建字典对象的 TypedDict 类的引用?

Gra*_*rus 2 python

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或者,也许在生成的对象中我缺少对原始类的引用?

Luc*_*can 5

一旦按照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'>