我想用型別提示(鍵應該是字串,值應該是另一個資料類的實體)初始化一個資料類字典,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?謝謝!
uj5u.com熱心網友回復:
您需要匯入一個欄位并使用一個default_factory:
from dataclasses import dataclass, field
from typing import Optional, Dict
@dataclass
class BookOrder():
id: str
@dataclass
class User:
usr_orders: Optional[Dict[str, BookOrder]] = 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)
部分問題是您將其Dict用作資料類的默認欄位。Dict是型別提示;我認為您是想使用dict()或{}- 但是,這行不通。試試看吧!你最終會得到這個錯誤:ValueError: mutable default <class 'dict'> for field usr_orders is not allowed: use default_factory。這是一個資料類的東西,它阻止您為多個實體使用 1 個字典。
進一步閱讀
uj5u.com熱心網友回復:
您正在使用:
usr_orders = Optional[Dict[str, BookOrder]] = Dict
代替:
usr_orders: Optional[Dict[str, BookOrder]] = Dict
替換=為:
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/343216.html
標籤:Python 蟒蛇-3.x 字典 python-数据类
