gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:23:08 25 4
gpt4 key购买 nike

我想用 初始化一个数据类字典输入提示 (键应该是字符串,值应该是另一个数据类的实例)称为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com