python - 在 Python3 中使用类型提示初始化 Optional Dict 的正确方法?

标签 python python-3.x dictionary python-dataclasses

我想用 初始化一个数据类字典输入提示 (键应该是字符串,值应该是另一个数据类的实例)称为 usr_orders在初始化实例时不需要用户 init。根据我的理解 Optionalunion(.., None) ,所以我去了:

@dataclass
class User:
    usr_orders: Optional[Dict[str, BookOrder]] = Dict
但是当我尝试使用键值对其进行修改时,出现以下错误:TypeError: '_GenericAlias' object does not support item assignment
def update_usr_orders(self, book_order:BookOrder):
    self.usr_orders[book_order.order_id] = book_order # book_order: BookOrder is a dataclass instance
这个错误似乎是由可选的 Dict 定义引起的。但我不知道如何解决这个问题。有谁知道为什么我不能更新 usr_orders ?谢谢!

最佳答案

只是为了添加到accepted answer ,请注意,在 Python 3.7+ 中,您还可以使用通过 __future__ 获得的新样式注释来声明数据类。进口。这应该允许您取消 typing在这种情况下进口。

from __future__ import annotations  # This can be removed in Python 3.10+

from dataclasses import dataclass, field


@dataclass
class BookOrder:
    id: str


@dataclass
class User:
    usr_orders: dict[str, BookOrder] | None = field(default_factory=dict)

    def update_usr_orders(self, book_order: BookOrder):
        self.usr_orders[book_order.id] = book_order


a = BookOrder('1')
u = User()
u.update_usr_orders(a)
print(u.usr_orders)

关于python - 在 Python3 中使用类型提示初始化 Optional Dict 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69791917/

相关文章:

python - 使用 python 处理 JSON 文件

python - 将字典树转换为多维列表

python - numpy 中的优雅解决方案

python - 使用 Python 的 Scikit-Learn 库对文本数据进行聚类并绘图

python - 使用 python/pandas 将数据标准化并绘制为堆积条形图

python - 在 csv 文件中查找每个月的最高温度?

python - python3 flask 应用程序中的 pymongo 导入错误

java - ASCII 世界地图导入和读取

python - 我如何矢量化矩阵/输入以便 scipy.optimize.minimize 可以使用它?

python - PyQt5 QListView拖放创建新的隐藏项