如何从对象中删除

时间:2012-05-21 17:03:01

标签: python class object containers

import pickle

class TasksError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)

class Task(object):
    def __init__(self, task = () ):
        if task ==():
            raise TasksError('Empty task.')
        self.name = task[0]
        self.date = task[1]
        self.priority = task[2]
        self.time = task[3]
        self.type = task[4]
        self.comment = task[5]

    def __str__(self):
        output = '''Name: %s
Date: %s
Priority: %s
Time: %s
Type: %s
Comment: %s
''' % ( self.name,
        self.date,
        self.priority,
        self.time,
        self.type,
        self.comment)
        return output

class Tasks(object):
    def __init__(self, container = []):
        self.container = [ Task(todo) for todo in container ]




    def delete(self):

        x = 0
        for todo in self.container:

             x = x + 1
             print "Task Number",x,"\n", todo
             delete = raw_input("what number task would you like to delete")
             if delete == "y":
                 del todo


        ############
        #x = 0
       # for task in self.container:
           # x = x+1
           #print "Task Number",x,"\n", task
            #delete = raw_input("what number task would you like to delete")
            #if delete == "y":
                #del(task)







    def add(self, task):
        if task == '':
            raise TasksError('Empty task')
        self.container.append( Task(task) )






    def __str__(self):
        output = '\n'.join( [ str(todo) for todo in self.container ] )
        return output

if __name__== "__main__":
    divider = '-' * 30 + '\n'



    tasks = Tasks( container = [] ) # creates a new, empty task list

    while True:
        print divider, '''Make your selection:
1. Add new task
2. Print all tasks
3. Save tasks
4. Load tasks from disk
5. Find high priority tasks
6. Sort by date
7. Delete task

<ENTER> to quit
'''
        try:
            menu_choice = int(input("Select a number from the menu: "))
        except:
            print 'Goodbye!'
            break

        if menu_choice == 1:

            task = raw_input (">>> Task: ")
            date = raw_input (">>> Date as string YYYYMMDD: ")
            priority = raw_input (">>> Priority: ")
            time = raw_input (">>> Time: ")
            Type = raw_input (">>> Type Of Task: ")
            comment = raw_input (">>> Any Comments? ")
            todo = (task, date, priority, time, Type, comment)

            tasks.add( todo )
            print tasks
        elif menu_choice == 2:
            print divider, 'Printing all tasks'
            print tasks
        elif menu_choice == 3:
            print divider, 'Saving all tasks'
            tasks.save()
        elif menu_choice == 4:
            print divider, 'Loading tasks from disk'
            tasks.load()
        elif menu_choice == 5:
            print divider, 'Finding tasks by priority'
            results = tasks.find_by_priority(priority='high')
            for result in results: print result
        elif menu_choice == 6:
            print divider, 'Sorting by date'
            tasks.sort_by_date()
            print tasks
        elif menu_choice == 7:

            tasks.delete()

我删除了部分代码(希望没什么重要的)。 一旦添加,我无法让python删除我的任务。 定义为“def delete”的两种方法都会给出错误消息类型错误:task / todo对象不支持删除。 有没有人知道解决这个问题?

1 个答案:

答案 0 :(得分:1)

您不会从列表中删除...您的代码有2个问题:

  • 如果使用for循环迭代,则不应在循环内更改它。
  • 从列表
  • del,您应该使用索引。

试试这个:

index = 0
while index < len(self.container):
    delete = raw_input("what number task would you like to delete")
    if delete == "y":
        del self.container[index]
    else:
        index += 1