dataclass在定义为Optional之后需要一个值



在下面的代码段中,我不明白为什么需要显式TimeCollection提供一个值。我该如何设置,使线路成为plan1 = TimeCollection()

from __future__ import annotations
from dataclasses import dataclass
import datetime
from typing import Optional, List
@dataclass
class Event():
event_type: str
event_date: datetime.datetime
@dataclass
class Timeline():
name: str
events: List[Event]
linked_timeline: Optional[Timeline]

@dataclass
class TimelineCollection():
timelines: Optional[List[Timeline]]
def add(self, tl:Timeline) -> None :
self.timelines.append(tl)

plan1 = TimelineCollection([])
app2_tl = Timeline(name="APP2", events=[], linked_timeline=None)
plan1.add(app2_tl)
app1_tl = Timeline(name="APP1", events=[
Event(event_type="Replace Attempt Scheduled", event_date=datetime.datetime(2022, 3, 31)),
Event(event_type="Replace Attempt Successful", event_date=datetime.datetime(2023, 1, 1)),
Event(event_type="Replaced", event_date=datetime.datetime(2023, 1, 1))],
linked_timeline=app2_tl
)
plan1.add(app1_tl)
请注意,在这种情况下,Optional可能不是正确的注释。Optional[T]等效于新样式注释中的T | None,这意味着该值可能是类型T,也可能是显式None值。

在数据类的范围内,理想情况下,注释为Optional[T]的字段将被分配默认值None,例如:

field: T | None = None

我注意到,在您的情况下,您似乎正在使用实例化plan1

plan1 = TimelineCollection([])

这意味着timelines字段的默认值实际上应该是一个空的list

这可以通过field(default_factory=...)来完成,如下所示。不建议设置default值,因为类型是list,这是Python中的可变类型。

from __future__ import annotations
from dataclasses import dataclass, field
@dataclass
class TimelineCollection:
timelines: list[Timeline] = field(default_factory=list)
plan1 = TimelineCollection()
print(plan1)

打印:

TimelineCollection(timelines=[])

相关内容

  • 没有找到相关文章

最新更新