公司动态

Python之面向对象- 类属性、类方法练习

📅 2026/7/24 6:09:10
Python之面向对象- 类属性、类方法练习
题目要求创建一个TodoList类表示家庭任务清单包含以下内容类属性total_tasks所有待办事项的总数初始值为0、total_complete_tasks所有已完成任务总数实例属性owner拥有者、task_type类别例如“生活”“工作”tasks任务列表每个任务是一个字典{“task”: “任务名”, “completed”: False}、created_time创建时间提示datetime.datetime.now()可以获取当前时间在__init__方法中初始化实例属性任务列表为空定义实例方法add_task(self,task_name)添加新任务更新tasks列表并更新total_tasks1complete_task(self,task_name)将指定任务标记为已完成并更新total_complete_tasks1show_tasks(self,show_allTrue)显示所有任务如果show_allFalse只显示未完成的任务delete_task(self,task_name)删除指定任务更新tasks列表并更新total_tasks-1get_progress(self)计算并返回单个任务清单中完成任务的百分比定义类方法get_total_tasks(cls)获取家庭所有待办事项的总数get_total_progress(cls)获取家庭所有任务完成百分比创建2个待办事项列表不同拥有者并进行以下操作分别添加几个个任务完成部分任务显示所有任务和只显示未完成任务查看任务完成进度删除一个任务importdatetimeclassTodoList:total_tasks0total_complete_tasks0 写法一 self.tasks 没有通过形参赋值这样的话表示当前任务清单的任务必须是在任务清单创建好之后 才能一个一个通过 add_task 方法添加。 此时无法在创建 ToolList 对象时直接在外面创建好任务列表直接导入。 比如新申请一个微信号然后再一个一个加好友。 def__init__(self,owner,task_type):self.ownerowner self.task_typetask_type self.tasks[]self.created_timedatetime.datetime.now() 写法二 self.tasks 通过形参赋值表示当前任务清单的任务可以在创建 ToolList 对象时预先从外边导入一个已经有部分任务的任务清单 之后也仍然可以 add_task 方法再添加新任务。 比喻买了一个新收集可以从原来的手机上导入通讯录。之后也可以在通讯录中添加新好友的信息。 # def __init__(self,owner, task_type, tasks):# self.owner owner# self.tasks tasks# self.task_type task_type# self.created_time datetime.datetime.now() 写法三结合上边的两种 # def __init__(self,owner, task_type, tasks None):# self.owner owner# self.tasks tasks if tasks else []# self.task_type task_type# self.created_time datetime.datetime.now() 在实例方法中访问实例属性或另一个实例方法都是通过 self 访问类属性或另一个类方法 都是通过 类名. 在类方法中不能直接访问实例属性实例方法 访问类属性或另一个类方法 都是通过 cls. 在静态方法中不能直接访问实例属性实例方法 通常也不会访问类属性或类方法 但是如果要访问类属性或类方法只能通过 类名. defadd_task(self,task_name):task{task:task_name,completed:False}self.tasks.append(task)TodoList.total_tasks1defcomplete_task(self,task_name):fortaskinself.tasks:iftask[task]task_name:task[completed]TrueTodoList.total_complete_tasks1 一个方法是否该 return 值通常什么规则? (1) 你这个方法是添加、修改、删除通常不 return或者要 return 的话通常返回是否操作成功 (2)你这个方法是查询xx: 一种是直接 print这个查询的结果限定只能在控制台打印对于现阶段来说没问题 因为目前咱们这个查询的数据没有别的去向只能在控制台打印 一种是 return 查询的内容这个查询的结果可以在测试代码中加 print 打印 也可以将来将查询结果存储到数据库中或发送到页面中显示更灵活 defshow_tasks(self,show_allTrue):ifshow_all:returnself.taskselse:return[taskfortaskinself.tasksifnottask[completed]]defdelete_task(self,task_name):fortaskinself.tasks:iftask[task]task_name:self.tasks.remove(task)TodoList.total_tasks-1iftask[completed]:TodoList.total_complete_tasks-1defget_progress(self):returnf{sum(1 for task in self.tasks if task[completed]) / len(self.tasks) :.2%}classmethoddefget_total_tasks(cls):returncls.total_tasksclassmethoddefget_total_progress(cls):returnf{cls.total_complete_tasks/(cls.total_tasks):.2%}# 测试print(开始的任务清单)t1TodoList(老师,教学)t1.add_task(写教案)t1.add_task(备课)s1TodoList(学生,学习)s1.add_task(做数学练习册)s1.add_task(背单词)print(t1.show_tasks())print(s1.show_tasks())print(已完成的任务清单:)t1.complete_task(备课)print(t1.show_tasks())print(老师未完成的任务清单:)print(t1.show_tasks(False))print(老师的任务总进度:,t1.get_progress())print(班级的任务总数量:,TodoList.get_total_tasks())print(班级的任务总进度:,TodoList.get_total_progress())