[英]understanding dataclass field usage
我對在數據類中使用 field() 的工作方式感到困惑。 我有這個(毫無意義的)例子:
from dataclasses import dataclass, field
@dataclass
class Person:
name: str = field(init=False)
def print_name(self):
print(self.name)
dieter = Person()
dieter.print_name()
我希望這會創建一個空字符串。 但是,這只發生在我添加參數 default="" 時。 甚至,在 pycharm 中,當我編寫以下代碼時,沒有語法高亮提示:
name: int = field(init=False, default="")
如果沒有語法高亮,類型提示的意義何在? 我真的沒有任何問題,我只是想了解實際發生的情況。
用例是,我正在創建一個類,后來包含 matplotlib 軸、繪圖等。由於它們一開始不存在,我只想初始化它們,所以它們連接到類,以后可以創建的。
從文檔(強調我的):
dataclass()
裝飾器檢查類以查找field
s。field
被定義為具有類型注釋的類變量。 除了下面描述的兩個例外,dataclass()
中的任何內容都不會檢查變量 annotation 中指定的類型。
所以類型提示主要用作一個標志來告訴dataclass
注意名稱。
這兩個例外是注釋是ClassVar
或InitVar
,分別用於指示名稱不是實例屬性,而是類屬性或僅 init 參數。
我認為第三個例外是 Python 3.10 中引入的新KW_ONLY
值,這表明以下字段不能作為位置參數傳遞給__init__
。 (如此注釋的“字段”根本沒有定義字段,但它仍然是一個修飾名稱,其類型dataclass
會注意。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.