如何在数据类中声明变量
How to declare variables in dataclasses
我试图在 dataclass
(y_set_max
和 y_set_min
)中声明两个变量。下面是我的代码:
from dataclasses import dataclass
@dataclass
class Ymax_ymin: #has to be object inside the brackets
y_default_max: int #500
y_default_min: int #0
current: int
recommended: int
def __post_init__(self):
self.y_set_max = max(y_default_max,current,recommended)
self.y_set_min = min(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)
这是抛出错误:NameError: name y_default_max
is not defined
如何修改我的 dataclass
代码以便返回两个打印语句?
语法与类型提示和默认参数相同:
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)
请注意,默认参数必须排在最后。此外,您在 __post_init__
中遗漏了 self
。
如果你想访问一个实例的属性,你需要在调用中包含该实例。虽然 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)
鉴于此 class 定义,您的初始语句将 运行 正确:
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
我试图在 dataclass
(y_set_max
和 y_set_min
)中声明两个变量。下面是我的代码:
from dataclasses import dataclass
@dataclass
class Ymax_ymin: #has to be object inside the brackets
y_default_max: int #500
y_default_min: int #0
current: int
recommended: int
def __post_init__(self):
self.y_set_max = max(y_default_max,current,recommended)
self.y_set_min = min(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)
这是抛出错误:NameError: name y_default_max
is not defined
如何修改我的 dataclass
代码以便返回两个打印语句?
语法与类型提示和默认参数相同:
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)
请注意,默认参数必须排在最后。此外,您在 __post_init__
中遗漏了 self
。
如果你想访问一个实例的属性,你需要在调用中包含该实例。虽然 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)
鉴于此 class 定义,您的初始语句将 运行 正确:
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