【发布时间】:2022-10-13 01:29:10
【问题描述】:
我正在尝试将“嵌套”TypedDict 定义为一组内部类,其中SomeDict 字典应该有一个id 字段,该字段可以是另一个TypedDict 或None:
from typing import TypedDict
class MyClass:
class SomeIdFieldDict(TypedDict):
some_nested_field: str
class SomeDict(TypedDict):
id: SomeIdFieldDict | None # The error is in this line.
上面的代码给了我以下错误:NameError: name 'SomeIdFieldDict' is not defined
我尝试引用 SomeIdFieldDict,但现在 Python 类型检查器将其视为字符串:
from typing import TypedDict
class MyClass:
class SomeIdFieldDict(TypedDict):
some_nested_field: str
class SomeDict(TypedDict):
id: "SomeIdFieldDict" | None # The error is in this line.
有了以上内容,我得到:
TypeError: unsupported operand type(s) for |: 'str' and 'NoneType'
我也尝试过引用顶级类,但无济于事(得到与上面相同的错误):
from typing import TypedDict
class MyClass:
class SomeIdFieldDict(TypedDict):
some_nested_field: str
class SomeDict(TypedDict):
id: "MyClass.SomeIdFieldDict" | None # The error is in this line.
我尝试采用的另一种方法是定义id 类型“内联”,如下所示:
from typing import TypedDict
class MyClass:
class SomeDict(TypedDict):
id: TypedDict("SomeIdFieldDict", {"some_nested_field": str}) | None
...但似乎没有正确解析,并且该字段被视为Any,id 字段的类型提示显示为:id: Any | None
有什么方法可以将这种“嵌套”TypeDict 定义为内部类?
【问题讨论】: