请注意,在这种情况下,
在下面的代码段中,我不明白为什么需要显式为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=[])