考虑一个参数具有可变默认值的数据类。为了能够使用新的默认值而不是共享的可变对象实例化对象,我们可以执行以下操作:
@dataclass
class ClassWithState:
name: str
items: Optional[List[str]] = None
def __post_init__(self) -> None:
if self.items is None:
self.items = []
这按预期工作。然而,每当我提到items
在此类的某些实例中,mypy 警告 items
可能没有。例如:c = ClassWithState("object name")
c.items.append("item1")
MyPy 会提示以下内容:Item "None" of "Optional[List[str]]" has no attribute "append".
我不想每次引用
items
时都添加不必要的检查如assert c.items is not None
到处都是我指的items
.我怎样才能说服我的 friend items
永远不会没有?
最佳答案
我会用 field
与 default_factory
选项集:
from dataclasses import dataclass, field
from typing import List
@dataclass
class ClassWithState:
name: str
items: List[str] = field(default_factory=list)
>>> ClassWithState("Hello")
ClassWithState(name='Hello', items=[])
关于python-3.x - 在 __post_init__ 中设置可选数据类参数时如何避免检查 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64670320/