Если вы хотите получить доступ к атрибутам экземпляра, вам нужно включить экземпляр в вызов. Хотя определение dataclass
скрывает от вас конструктор, в котором переданное y_default_max
считывается в self.y_default_max
, оно все равно имеет место, и если вы хотите атрибуты экземпляра, вам необходимо включить self.
.
Кроме того, если вы хотите вычислить атрибут dataclass
'на основе других, вы можете использовать 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)
Учитывая это определение класса, ваши начальные операторы будут работать правильно:
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