Met*_*lis 5 type-hinting python-3.x mypy python-dataclasses
考虑一个参数具有可变默认值的数据类。为了能够使用新的默认值实例化一个对象而不是共享可变对象,我们可以这样做:
@dataclass
class ClassWithState:
name: str
items: Optional[List[str]] = None
def __post_init__(self) -> None:
if self.items is None:
self.items = []
Run Code Online (Sandbox Code Playgroud)
这按预期工作。items然而,每当我在此类的某些实例中引用时,mypy 都会警告该items值可能为 None。例如:
c = ClassWithState("object name")
c.items.append("item1")
Run Code Online (Sandbox Code Playgroud)
MyPy 会抱怨类似以下内容:
“Optional[List[str]]”的项目“None”没有属性“append”。
我不想每次提到时都添加不必要的检查,items例如
assert c.items is not None
Run Code Online (Sandbox Code Playgroud)
我提到的到处都是items。我怎样才能说服mypyitems永远不会是None?
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=[])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9605 次 |
| 最近记录: |