我無法使用新的 defaultdict(dict) 設定簡單的資料類。
如果我告訴工廠使用下面的'dict',實體化失敗并出現 typerror collection.defaultdict object is not callable
from collections import defaultdict
from dataclasses import dataclass, field
@dataclass
class ResultSet:
changed: bool = False
mqttdata: defaultdict(dict) = field(default_factory=defaultdict(dict)) # does not work!
它使用field(default_factory=defaultdict)確實可以作業,但是我的代碼稍后會在遇到丟失的鍵時失敗-大概是因為沒有為 dict 設定 defaultdict。
如何在資料類中正確設定新的 defaultdict(dict)?
uj5u.com熱心網友回復:
您的代碼以及dataclasses當前的使用方式存在一些問題:
注解中的型別泛型一般需要通過方括號指定
[],sodefault[dict]而不是defaultdict(dict)for example。to的
default_factory引數dataclasses.field()需要是一個無引數的可呼叫物件,它回傳一個設定了默認值的新物件。例如,假設您有一個Inner為所有欄位指定默認值的嵌套資料類,您可以在每次實體化主資料類時使用它default_factory=Inner來創建一個新物件。Inner請注意,該
default_factory引數主要用于可變型別,例如set、list和dict,因此同一物件不會在資料類實體之間共享(并且可能會發生變異)。
總而言之,這是為型別欄位設定默認值的作業代碼defaultdict[dict]:
from collections import defaultdict
from dataclasses import dataclass, field
@dataclass
class ResultSet:
changed: bool = False
mqttdata: defaultdict[dict] = field(default_factory=lambda: defaultdict(dict)) # works!
print(ResultSet())
在 Python 3.9 之前的版本中,也就是引入PEP 585時,您需要在頂部添加以下匯入,以便對任何型別注釋進行惰性求值:
from __future__ import annotations
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439651.html
標籤:python-3.x 默认字典 蟒蛇数据类
