为什么在属性名称使用键入匹配 class 名称时引发 TypeError?
Why is TypeError raised when attribute name matches class name using typing?
我无法初始化数据class 列表属性,其中该属性与列表元素的 class.
同名
更改属性名称后初始化工作正常。我对 Pydantic classes 有同样的问题。
from dataclasses import dataclass, field
from typing import List
@dataclass
class Thing:
name: str
@dataclass
class MyClass:
Thing: List[Thing] = field(default_factory=list)
c = MyClass()
这会产生以下错误:
TypeError: Parameters to generic types must be types. Got Field(name=None,type=None,default=<dataclasses._MISSING_TYPE object at 0x00000201CA208518>,default_f.
当我改变时:
Thing: List[Thing] = field(default_factory=list)
至:
thing: List[Thing] = field(default_factory=list)
未引发 TypeError。
因为它会覆盖 Thing
。
这就是 thing
有效的原因。
我无法初始化数据class 列表属性,其中该属性与列表元素的 class.
同名更改属性名称后初始化工作正常。我对 Pydantic classes 有同样的问题。
from dataclasses import dataclass, field
from typing import List
@dataclass
class Thing:
name: str
@dataclass
class MyClass:
Thing: List[Thing] = field(default_factory=list)
c = MyClass()
这会产生以下错误:
TypeError: Parameters to generic types must be types. Got Field(name=None,type=None,default=<dataclasses._MISSING_TYPE object at 0x00000201CA208518>,default_f.
当我改变时:
Thing: List[Thing] = field(default_factory=list)
至:
thing: List[Thing] = field(default_factory=list)
未引发 TypeError。
因为它会覆盖 Thing
。
这就是 thing
有效的原因。