簡體   English   中英

了解數據類字段的使用

[英]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注意名稱。

這兩個例外是注釋是ClassVarInitVar ,分別用於指示名稱不是實例屬性,而是類屬性或僅 init 參數。

我認為第三個例外是 Python 3.10 中引入的新KW_ONLY值,這表明以下字段不能作為位置參數傳遞給__init__ (如此注釋的“字段”根本沒有定義字段,但它仍然是一個修飾名稱,其類型dataclass會注意。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM