作为我的家庭作业的一部分,我正在尝试创建一个可以读取文本文件,创建对象并将其附加到列表的函数。我下面有一些代码,但我不断收到此错误: TypeError: init ()缺少2个必需的位置参数:“ power”和“ weight”
对不起,如果代码看起来有些古怪,请首次在此处发布。
class Collectable:
def __init__(self, name, power, weight):
self.name = name
self.power = power
self.weight = weight
def read_file(file):
ls = []
with open(file) as f:
lines = f.readlines()
for line in lines:
x = line.split(" | ")
ls.append(Collectable(x))
return ls
p = read_file("file.txt")
print(p)
file.txt
Mace | 10 | 35
Shield | 3 | 15
输出应该返回列表中的对象
[“狼牙棒”,“盾牌”]
答案 0 :(得分:0)
您创建了初始化函数__init__()
来接受三个参数(除self
之外):
def __init__(self, name, power, weight):
但是,当您尝试创建实例时,只能传递一个值:
ls.append(Collectable(x))
您希望x
包含三个值,但是您的代码不知道。如果要将x
中的单个项目传递给初始化,最简单的方法是使用前导*
unpack:
ls.append(Collectable(*x))
如果您还没有完成参数解压缩,也可以在赋值步骤中解压缩:
(name, power, weight) = line.split(" | ")
ls.append(Collectable(name, power, weight))
答案 1 :(得分:0)
class Collectible:
def __init__(self, name, power, weight):
self.name=name
self.power=power
self.weight=weight
def __repr__(self):
return self.name
def read_file(file):
ls=[]
with open(file) as f:
lines=f.readlines()
for line in lines:
x=line.split(" | ")
ls.append(Collectible(x[0],x[1],x[2]))
return ls
read_file("file.txt")