创建一个从文件读取的函数,创建一个附加到列表的对象

时间:2019-05-14 14:26:03

标签: python python-3.x

作为我的家庭作业的一部分,我正在尝试创建一个可以读取文本文件,创建对象并将其附加到列表的函数。我下面有一些代码,但我不断收到此错误: 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

输出应该返回列表中的对象

[“狼牙棒”,“盾牌”]

2 个答案:

答案 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")