Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建一个从文件读取的函数,将创建一个附加到列表的对象_Python_Python 3.x - Fatal编程技术网

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

Python 创建一个从文件读取的函数,将创建一个附加到列表的对象,python,python-3.x,Python,Python 3.x,作为家庭作业的一部分,我正在尝试创建一个函数,该函数可以读取文本文件,创建对象,然后将其附加到列表中。我在下面有一些代码,但我一直遇到这个错误: TypeError:init()缺少两个必需的位置参数:“power”和“weight” 对不起,如果代码看起来有点不可靠,第一次在这里发布 class Collectable: def __init__(self, name, power, weight): self.name = name self.powe

作为家庭作业的一部分,我正在尝试创建一个函数,该函数可以读取文本文件,创建对象,然后将其附加到列表中。我在下面有一些代码,但我一直遇到这个错误: TypeError:init()缺少两个必需的位置参数:“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)
输出应该返回列表中的对象


[“Mace”,“Shield”]

您创建了初始化函数
\uuu init\uu()
以接受三个参数(除了
self
):

但是,尝试创建实例时,只传递一个值:

ls.append(Collectable(x))
您希望
x
包含三个值,但您的代码不知道这一点。如果要将
x
中的各个项目传递给初始化,最简单的方法是使用一个前导的
*

ls.append(Collectable(*x))
如果您尚未完成参数解包,还可以在赋值步骤解包:

(name, power, weight) = line.split(" | ")
ls.append(Collectable(name, power, weight))

您创建了初始化函数
\uuuu init\uuuu()
以接受三个参数(除了
self
):

但是,尝试创建实例时,只传递一个值:

ls.append(Collectable(x))
您希望
x
包含三个值,但您的代码不知道这一点。如果要将
x
中的各个项目传递给初始化,最简单的方法是使用一个前导的
*

ls.append(Collectable(*x))
如果您尚未完成参数解包,还可以在赋值步骤解包:

(name, power, weight) = line.split(" | ")
ls.append(Collectable(name, power, weight))


ls.append(Collectable(*line.split(“|”)
Hi Tony,我刚试过,但仍然收到相同的错误类型error:init()缺少2个必需的位置参数:“power”和“weight”@mercurial_s这只是对您在我的答案评论中描述的同一问题的不同表示。请确保每行拆分后正好包含3个部分。换句话说,检查输入文件。如果len(x)!=3:在您的
x=line.split(“|”)之后继续
,跳过那些不应该传入的行。
ls.append(Collectable(*line.split(“|”)
嗨,Tony,我刚刚试过了,但仍然收到相同的错误TypeError:init()缺少2个必需的位置参数:“power”和“weight”@mercurial_s这只是对您在我的答案评论中描述的同一问题的不同表示。请确保每行拆分后正好包含3个部分。换句话说,检查输入文件。如果len(x)!=3:在你的
x=line之后继续。拆分(“|”)以跳过那些不应该传入的行。嗯,我尝试了第二位,但是我得到了一个:ValueError-没有足够的值来解压缩(预期为3,得到1)。我可能需要用其他东西拆分吗?抱歉,第21行就是它将错误追溯到的位置:name、power、weight=line.split(“|”)文件中可能有意外的行,或者后面有换行符。您可以通过捕获ValueError并忽略该行来处理此问题,但这超出了这个问题的范围。哦,该死,我尝试了:x=line.replace(“\n”,”)name,power,weight=x.split(“|”)ls.append(Collectable(name,power,weight))来删除新行字符,但是,我仍然收到和以前一样的错误,没有足够的值来解包。嗯,我尝试了第二个位,但是我得到了一个:ValueError-没有足够的值来解包(预期为3,得到1)。我可能需要用其他东西拆分吗?抱歉,第21行就是它将错误追溯到的位置:name、power、weight=line.split(“|”)文件中可能有意外的行,或者后面有换行符。您可以通过捕获ValueError并忽略该行来处理此问题,但这超出了这个问题的范围。哦,该死,我尝试了:x=line.replace(“\n”,”)name,power,weight=x.split(“|”)ls.append(Collectable(name,power,weight))来删除新行字符,但是,我仍然收到与以前相同的错误,没有足够的值来解包,请求在列表中附加类对象而不是实例“创建一个对象,然后将其附加到列表”,输出应该返回列表中的对象[“Mace”,“Shield”]@prashantrana现在可以了吗?您现在正在选择类对象列表,为了得到结果,无需添加新函数,只需迭代类对象并调用name ie
sol=[i.name for i in read_file('read.txt')]
OP要求将类对象附加到列表中而不是实例“创建对象,然后将其附加到列表”,输出应返回列表中的对象[“Mace”,“Shield”]@prashantrana现在可以了吗?您现在正在对类对象列表进行排序,为了得到结果,无需添加新函数,只需在类对象上迭代并调用name ie
sol=[i.name for i in read_file('read.txt')]