如何将列表作为参数传入dataclass?报TypeError缺失必选参数
解决方法
你遇到的问题是因为你把整个列表 a 直接传给了 First 的构造函数,但实际上 a 是一个包含单个子列表的外层列表,而且构造函数需要的是30个独立的位置参数,不是一个列表参数。
正确的写法是使用Python的解包操作符*,把a[0]里的元素逐个拆成位置参数传递:
p = First(*a[0])
为什么这样能解决问题?
- 从你的终端输出能看到,
len(a)是1,说明a本身只有一个元素,这个元素才是包含30个属性值的列表(len(a[0])=30),正好对应First类定义的30个字段。 *操作符的作用是把可迭代对象(比如这里的a[0])的元素“展开”,作为独立的位置参数传给函数/类构造方法。这样就满足了First.__init__需要30个 positional arguments 的要求,不会再触发TypeError。
扩展:处理多行数据的情况
如果你的JSON文件里有多条数据,你可以直接从DataFrame批量创建First实例:
instances = d.apply(lambda row: First(*row), axis=1).tolist()
这样instances就是一个包含所有First对象的列表,每条JSON数据对应一个实例。
内容的提问来源于stack exchange,提问作者MikiBelavista
相关产品推荐
相关产品推荐

