通常的答案没有帮助TypeError

时间:2017-05-19 18:07:47

标签: python list

我收到TypeError: 'list' object is not callable但我无法查看通常的使用答案list[]而不是list()的适用位置。我似乎没有使用任何一种符号,只是调用列表中的函数。我很困难,可以在这里使用一些帮助

import scheduler

def main():
    sched = scheduler.Scheduler()

    sched.line_list("/home/scabandari/Desktop/threads.txt")  # Error is caused by this line

    # sched.create_processList()


if __name__ == "__main__":
    main()

scheduler.py:

import process


class Scheduler:
    def __init__(self):
        self.line_list = []
        self.process_list = []
        pass

    # populates line_list[] from "/location/.txt" file, each line reps a process object
    def line_list(self, file):
        f = open(file)
        getlines = f.readlines()
        for line in getlines:
            self.line_list.append(line)
        self.line_list.pop(0)

    # populates process_list[] from line_list[]
    def process_list(self):
        for line in self.line_list:
            temp_arr = line.split()
            self.process_list.append(process.Process(temp_arr[0], temp_arr[1],
                                     temp_arr[2], temp_arr[3]))

        for proc in self.process_list:
            proc.print_process()

1 个答案:

答案 0 :(得分:0)

知道如何定义名为Scheduler的类对象,如下所示

class Scheduler:
    def __init__(self):
        self.line_list = []
        self.process_list = []

    def line_list(self, file):
        f = open(file)
        getlines = f.readlines()
        for line in getlines:
            self.line_list.append(line)
        self.line_list.pop(0)        
    ...

然后实例化它,即

inst = Scheduler()

您对方法line_list所做的定义被__init__的后实例化执行覆盖,后者将其转换为列表。

这意味着,正如melpomene在评论中提到的那样,

  

您需要决定是否希望line_list成为方法或列表。它不可能两者兼而有之。

因此,您可能想要做的是重命名您的方法,并给它一个代表其实际功能的名称,例如。

    ...
    def populate_line_list(self, file):
        '''
        Method which populates line_list from "/location/.txt" file,
        each line reps a process object
        '''
        f = open(file)
        getlines = f.readlines()
        for line in getlines:
            self.line_list.append(line)
        self.line_list.pop(0)
        f.close() #do not forget to close your file, or use a with-statement
    ...

最后你可以做到

import scheduler

def main():
    sched = scheduler.Scheduler()
    sched.populate_line_list("/home/scabandari/Desktop/threads.txt")

if __name__ == "__main__":
    main()