我想用 初始化一个数据类字典输入提示 (键应该是字符串,值应该是另一个数据类的实例)称为 usr_orders
在初始化实例时不需要用户 init。根据我的理解 Optional
是 union(.., 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/