如何在其他类中正确实例化dataclass并修改其值?
正确实现Python Dataclass与其他类的交互
错误分析
你的代码存在几个关键问题:
- 定义dataclass误用了
def关键字,dataclass必须基于class定义 - UDP类的属性初始化位置错误,
self.datastorage应该放在类的__init__方法内完成 - 代码中
some attributes属于无效语法,类的属性需要规范定义
正确实现步骤
步骤1:正确定义Dataclass
使用class关键字配合dataclass装饰器定义,注意字段的类型标注:
from dataclasses import dataclass @dataclass(slots=True) class Storage: timestamp: float value: float
注:slots=True仅用于限制实例属性的范围,不会导致字段只读——如果之前遇到只读报错,大概率是误加了frozen=True参数,移除该参数即可正常修改字段值。
步骤2:定义使用Dataclass的UDP类
将dataclass的实例化逻辑放在UDP类的__init__方法中,这是Python类初始化属性的标准方式:
class UDP: def __init__(self): # 初始化Storage实例,可指定初始值 self.datastorage: Storage = Storage(timestamp=0.0, value=0.0) def updatedata(self, time: float, val: float): # 直接修改Storage实例的字段值 self.datastorage.timestamp = time self.datastorage.value = val
步骤3:测试代码验证功能
def main(): test = UDP() test.updatedata(0.01, 2) # 打印验证更新结果 print(f"更新后:时间戳={test.datastorage.timestamp},数值={test.datastorage.value}") if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者geekygekko
相关产品推荐
相关产品推荐

