为了账号安全,请及时绑定邮箱和手机立即绑定

如何在数据类中声明变量

如何在数据类中声明变量

人到中年有点甜 2022-01-18 21:01:11
我试图在dataclass(y_set_max和y_set_min) 中声明两个变量。下面是我的代码:from dataclasses import dataclass@dataclassclass 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 = 800recommended = 650set_axis = Ymax_ymin(500,0,current,recommended)print(set_axis.y_set_max)print(set_axis.y_set_min)这是抛出错误: NameError: name y_default_maxis not defined如何修改我的dataclass代码以便返回两个打印语句?
查看完整描述

2 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

如果要访问实例的属性,则需要在调用中包含该实例。虽然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


查看完整回答
反对 回复 2022-01-18
?
慕斯709654

TA贡献1840条经验 获得超5个赞

语法与类型提示和默认参数相同:


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)

请注意,默认参数必须放在最后。另外,你self在__post_init__.


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号