如何修改Python Dataclass中List类型字段的内容?
问题:修改Dataclass中List类型字段的内容无效怎么办?
你遇到的问题其实是因为创建了临时实例却没保存,导致赋值操作相当于做了无用功。咱们一步步看怎么解决:
首先,先回顾下你的代码:
from dataclasses import dataclass, field from typing import List @dataclass class stats: foo: List[list] = field(default_factory=list)
你用stats().foo = [[1], [1]]的时候,其实是先创建了一个stats的临时对象,给它的foo字段赋值,但这个对象没有被任何变量持有,Python会立刻把它销毁,所以你看不到任何修改效果。
正确的修改方式有两种:
1. 先保存实例到变量,再赋值
把实例存到一个变量里,之后再修改字段,这样实例不会被立刻回收,修改就能生效:
# 创建实例并保存到变量 my_stats = stats() # 给foo字段赋值 my_stats.foo = [[1], [1]] # 现在打印就能看到效果了 print(my_stats.foo) # 输出: [[1], [1]]
2. 直接修改原列表(不重新赋值)
如果不想替换整个列表,只是想往里面加元素或者修改现有元素,可以直接操作原列表:
my_stats = stats() # 往foo里追加元素 my_stats.foo.append([1]) my_stats.foo.append([1]) # 或者修改已有元素 my_stats.foo[0] = [2] print(my_stats.foo) # 输出: [[2], [1]]
另外提个小建议:Python的类名建议用大驼峰命名法(比如Stats而不是stats),更符合PEP8编码规范哦。
内容的提问来源于stack exchange,提问作者Mato098
相关产品推荐
相关产品推荐

