2 回答

TA貢獻(xiàn)1854條經(jīng)驗 獲得超8個贊
如果要訪問實例的屬性,則需要在調(diào)用中包含該實例。雖然dataclass定義向您隱藏了構(gòu)造函數(shù),其中y_default_max傳入的 被讀入self.y_default_max,但它仍然會發(fā)生,如果您想要實例屬性,則需要包含self..
此外,如果您想dataclass根據(jù)其他人計算一個 ' 屬性,您可以使用init=False它來聲明它并仍然獲得類型提示等:
from dataclasses import dataclass, field
@dataclass
class YmaxYmin:
current: int
recommended: int
y_default_max: int = 500
y_default_min: int = 0
y_set_max: int = field(init=False)
y_set_min: int = field(init=False)
def __post_init__(self):
self.y_set_max = max(self.y_default_max, self.current, self.recommended)
self.y_set_min = min(self.y_default_min, self.current, self.recommended)
鑒于此類定義,您的初始語句將正常運(yùn)行:
set_axis = YmaxYmin(current=500, recommended=0, y_default_max=800, y_default_min=650)
print(set_axis.y_set_max) # prints 800
print(set_axis.y_set_min) # prints 0

TA貢獻(xiàn)1840條經(jīng)驗 獲得超5個贊
語法與類型提示和默認(rèn)參數(shù)相同:
from dataclasses import dataclass
@dataclass
class Ymax_ymin: #has to be object inside the brackets
current: int
recommended: int
y_default_max: int = 500
y_default_min: int = 0
def __post_init__(self):
self.y_set_max = max(self.y_default_max, current, recommended)
self.y_set_min = min(self.y_default_min, current, recommended)
current = 800
recommended = 650
set_axis = Ymax_ymin(500, 0, current, recommended)
print(set_axis.y_set_max)
print(set_axis.y_set_min)
請注意,默認(rèn)參數(shù)必須放在最后。另外,你self在__post_init__.
添加回答
舉報