使用Python OOP创建ToDoList

2024-06-16 11:36:00 发布

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

所以我开始学习Python中的OOP。我有一个创建ToDoList的简单任务。我不需要以txt文件或其他格式保存任何内容。这是必须与我的程序一起使用的测试代码:

mylist = ToDoList('My sample ToDoList')
for i in range(1, 11):
   task = Task(f'Simple task #{i}')
   if i % 2:
       task.finish()
   mylist.add_task(task)
mylist.print_list()

这是预期的产出:

My sample ToDoList
###
[x] Simple task #1
[ ] Simple task #2
[x] Simple task #3
[ ] Simple task #4
[x] Simple task #5
[ ] Simple task #6
[x] Simple task #7
[ ] Simple task #8
[x] Simple task #9
[ ] Simple task #10

目前,我的代码如下所示:

class ToDoList(object):
    def __init__(self, name):
        self.n = name
        print(name,"\n","#################")
        self.d = None
    def add_task(self, dic):
        self.d = dic
    def print_list(self):
        for i in self.d:
            if self.d[i] == 'undone':
                print("[ ]" + str(i))
            elif self.d[i] == 'done':
                print("[x]" + str(i))

class Task:
    tasks = {}
    def __init__(self, task):
        self.t = task
        print(task)
        self.tasks[task] = 'undone'

    def finish(self):
        self.tasks[task] = 'done'


mylist = ToDoList('My simple ToDoList')
for i in range(1, 11):
    task = Task(f'Simple task #{i}')
    if i % 2:
        task.finish()
    mylist.add_task(task)
mylist.print_list()

这是我目前代码的输出:

My simple ToDoList 
 #################
Simple task #1
Simple task #2
Simple task #3
Simple task #4
Simple task #5
Simple task #6
Simple task #7
Simple task #8
Simple task #9
Simple task #10

现在我被卡住了。我有一个部分,我创建了未完成任务的字典,然后将值更改为done。我想把这本字典传递给我的ToDoList类,然后只打印键和值。我觉得解决办法很简单,但我似乎找不到。我很乐意接受任何关于代码优化的建议


Tags: inselfaddfortaskifmydef
1条回答
网友
1楼 · 发布于 2024-06-16 11:36:00

Python是面向对象编程的优秀语言,但它也有许多高级语言特性,使得一些用户定义的类变得不必要。例如,您的ToDoList添加的内容(当前)不超过Python list提供的内容。并不是说您将来可能不需要这样的类,但是当那个时候到来时,您可能希望添加类似列表的特殊方法,以允许它像真正的list一样运行并支持迭代

因此,对于一个精简的解决方案,我将重点放在Task类上,它是必需的,但不一定需要模仿字典。作为下一步,您可以开始向其添加属性和方法,以支持描述文本、截止日期等功能

注意:将print之类的输出方法留在类之外几乎总是一个好主意。如果您希望您的类是可重用的,那么您会发现不同的客户机有不同的输出需求——让客户机而不是类来担心事情的输出端

例如:

class Task:
    def __init__(self, name):
        self.name = name
        self.done = False

task_list = []
for id in range(1, 11):
    task = Task(f"Simple task #{id}")
    if id % 2 == 0:
        task.done = True
    task_list.append(task)
         
for task in task_list:
    print(f"[{'X' if task.done else ' '}] {task.name}")

输出:

[ ] Simple task #1
[X] Simple task #2
[ ] Simple task #3
[X] Simple task #4
[ ] Simple task #5
[X] Simple task #6
[ ] Simple task #7
[X] Simple task #8
[ ] Simple task #9
[X] Simple task #10

相关问题 更多 >