Python:将方法结果分配给构造函数上的实例变量时出错

2024-10-01 07:27:40 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行这段代码时,我收到一条消息,说没有定义名称“readFile”。我怎样才能写下它,使我没有这个错误?我想给self.cities分配一个列表列表。多谢各位

class TSP:

    def __init__(self, filename):
        self.filename = filename
        self.cities = readFile()

    def readFile(self):   
        f = open(self.filename, 'r')
        citieslist = []
        res = f.readlines()
        for line in res:
            aList = list(line.split(';'))
            for i in range(0,len(aList)):
                aList[i] = aList[i].rstrip('\n')
            citieslist.append(aList)
        return readFile (self.cities)
        f.close()
        

Tags: 代码inself消息列表for定义def
2条回答

您没有在init中使用self。在readFile处有一个递归函数。从函数readFile返回后关闭了文件。您只需剥去整条线即可切断\n。也不需要返回,因为您可以在Class内使用引用

class TSP:
    def __init__(self, filename):
        self.filename = filename
        self.cities = self.readFile()

    def readFile(self):   
        f = open(self.filename, 'r')
        citieslist = []
        res = f.readlines()
        for city in res:
            city = city.strip().split(';')
            citieslist.append(city)
        f.close()
        return citieslist

由于您在readFile的接口中省略了filename的参数,因此基本上否定了readFile的任何未来用法,您可以执行以下操作

我们只需使用with语句来处理文件,并使用list comprehension来合成结果

class TSP:
    def __init__(self, filename):
        with open(filename, 'r') as f:
            self.cities = [line.strip().split(';') for line in f.readlines()]

        #do something with self.cities here
    
                
tsp = TSP('somefile.ext')

相关问题 更多 >