【问题标题】:How to "address" a Python dataclass instance?如何“解决” Python 数据类实例?
【发布时间】:2021-04-26 08:14:44
【问题描述】:

我有一个 Python 数据类定义如下:

@dataclass(order=True)
class Accident:
    name: str
    year: int
    month: int
    num_accidents: int

我正在创建一个“意外”实例列表,如下所示:

accidents_list = []

# For the year 2020, create instances to record accidents per month
for month in range(1,13):
     # name will be in the format 2020-1, or 2020-2 and so on
     name = "2020" + "-" + str(month)
     # I am adding name, year and month, accidents to be added later
     accidents_list.append(Accident(name, 2020, month))

我想将事故数量添加到 2020-02,即 2 月。 如何引用实例来添加事故数量?我不能在 for 循环中添加事故,因为在创建此实例时我没有数据。

我想做类似2020-02.num_accidents = 5 的事情。我不想用每个月的 if 语句来遍历事故列表,如果列表真的很大,那将是太多的事情。

for accidents in accidents_list:
    if (accident.name == '2020-02'):
        accident.num_accidents = 5
    elif (accident.name = '2020-03'):
        accident.num_accidents = 12

【问题讨论】:

  • 与您引用任何其他“类型”实例的方式相同吗?如果你想通过一个键选择实例,创建一个数据结构来通过一个键选择实例——比如dict。
  • 在实际获得事故数据之前,您是否有任何理由创建 Accident 实例?当你有数据时,为什么不稍后再创建它们呢?
  • > 是否有任何理由在您实际拥有事故数据之前创建事故实例?事故数量来自昂贵的 API 调用,我正在尝试优化我的代码并让我的数据结构“准备好”和“预加载”,API 调用稍后会填充事故数量。
  • > 当我们告诉你你做错了,你会变成废柴吗?大声笑,不,我是来学习的,告诉我我以“错误”的方式做这件事并没有什么坏处。
  • 好的,那么5 和12 这样的数据是从哪里来的呢?

标签: python-3.x python-dataclasses


【解决方案1】:

所以,是的,您确实需要遍历列表以使用num_accidents 填充所有Accident 实例:

for accident in accidents_list:
    year_month = f'{accident.year}-{accident.month}'
    value = api.get_accidents_from_month(year_month)
    if value:
        accident.num_accidents = value

【讨论】:

  • 谢谢,这似乎比我的干净得多。
猜你喜欢
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多