当前位置: 首页 > news >正文

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

题目要求:

  1. 创建一个TodoList类,表示家庭任务清单,包含以下内容:

    • 类属性total_tasks(所有待办事项的总数,初始值为0)、total_complete_tasks(所有已完成任务总数)
    • 实例属性owner(拥有者)、task_type(类别,例如“生活”,“工作”),tasks(任务列表,每个任务是一个字典:{“task”: “任务名”, “completed”: False})、created_time(创建时间,提示datetime.datetime.now()可以获取当前时间)
  2. __init__方法中:

    • 初始化实例属性
    • 任务列表为空
  3. 定义实例方法:

    • add_task(self,task_name):添加新任务(更新tasks列表,并更新total_tasks+=1)
    • complete_task(self,task_name):将指定任务标记为已完成(并更新total_complete_tasks+=1)
    • show_tasks(self,show_all=True):显示所有任务(如果show_all=False,只显示未完成的任务)
    • delete_task(self,task_name):删除指定任务(更新tasks列表,并更新total_tasks-=1)
    • get_progress(self):计算并返回单个任务清单中完成任务的百分比
  4. 定义类方法:

    • get_total_tasks(cls):获取家庭所有待办事项的总数
    • get_total_progress(cls):获取家庭所有任务完成百分比
  5. 创建2个待办事项列表(不同拥有者),并进行以下操作:

    • 分别添加几个个任务
    • 完成部分任务
    • 显示所有任务和只显示未完成任务
    • 查看任务完成进度
    • 删除一个任务
importdatetimeclassTodoList:total_tasks=0total_complete_tasks=0""" 写法一: self.tasks 没有通过形参赋值,这样的话,表示当前任务清单的任务必须是在任务清单创建好之后, 才能一个一个通过 add_task 方法添加。 此时无法在创建 ToolList 对象时,直接在外面创建好任务列表直接导入。 比如:新申请一个微信号,然后再一个一个加好友。 """def__init__(self,owner,task_type):self.owner=owner self.task_type=task_type self.tasks=[]self.created_time=datetime.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_tasks+=1defcomplete_task(self,task_name):fortaskinself.tasks:iftask["task"]==task_name:task["completed"]=TrueTodoList.total_complete_tasks+=1""" 一个方法是否该 return 值,通常什么规则? (1) 你这个方法是添加、修改、删除,通常不 return,或者要 return 的话,通常返回是否操作成功 (2)你这个方法是查询xx: 一种是直接 print,这个查询的结果限定只能在控制台打印,对于现阶段来说没问题, 因为目前咱们这个查询的数据没有别的去向,只能在控制台打印 一种是 return 查询的内容,这个查询的结果可以在测试代码中加 print 打印, 也可以将来将查询结果存储到数据库中,或发送到页面中显示,更灵活 """defshow_tasks(self,show_all=True):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_tasks@classmethoddefget_total_progress(cls):returnf"{cls.total_complete_tasks/(cls.total_tasks):.2%}"# 测试print("开始的任务清单:")t1=TodoList("老师","教学")t1.add_task("写教案")t1.add_task("备课")s1=TodoList("学生","学习")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())
http://www.jsqmd.com/news/1252621/

相关文章:

  • BQ4050 SBS命令实战:从安全模式到生产测试全流程解析
  • AI时代程序员核心技能重构与实践指南
  • AGI技术突破与行业准备度深度分析
  • HiPRAG:动态门控优化RAG系统检索效率
  • TVP5146与TVP5150A VBI原始数据模式配置详解与工程实践
  • 在线去水印用什么工具?2026实测这5个在线去水印网站免费好用 - 免费软件工具方法教程
  • AI技术助力跨境电商合规:Ozon平台实战解析
  • 劳力士保养价格查询|网点地址与客服热线权威信息公告(2026年7月最新) - 劳力士官方服务中心
  • 自监督学习的语义理解困境与突破路径
  • 南宁劳力士售后客服电话及网点地址2026年7月最新权威通知 - 劳力士服务中心
  • 华为OD机试C++题解:滑动窗口与哈希集合破解字符串解密
  • QMCDecode解密原理与实战:解锁QQ音乐加密格式的完整指南
  • 劳力士中国售后服务中心|最新地址和维修热线权威信息公示(2026年7月最新) - 劳力士服务中心
  • Unity打包后UMP视频黑屏?5个系统化解决方案与深度排查指南
  • OpenClaw:基于Gateway与AI Agent的智能助手架构解析
  • Google Flash模型工具:数学公式转3D打印的完整实践指南
  • MSP430 LCD_B寄存器配置与EEM高级调试实战指南
  • 劳力士中国售后服务中心|完整热线和最新维修地址权威信息公告(2026年7月最新) - 劳力士服务中心
  • BQ41Z50高级充电算法:从参数配置到电池寿命优化的工程实践
  • 2026上海宝山区装修公司口碑评级榜 入住业主真实评价汇总表 - 资讯报道
  • 低代码IDE与生成式AI结合加速企业级AI代理开发
  • TVMSTofu视频管理平台:多光谱智能监控与AI分析实践
  • 声明:天津劳力士售后网点地址与客服电话2026年7月最新版本 - 劳力士官方服务中心
  • 原生鸿蒙像素画板实战 20:拼豆模板生成
  • Grok 4.5与Outlook集成:AI智能邮件管理与自动化实战指南
  • 外贸成交32 | 客户说要“便宜的”,其实他没说出真正想要的 - 外贸圈集团
  • 2026天津CPPM认证机构怎么选?4个核心维度帮你避坑 - 企智芯
  • YOLO11训练中NaN Loss与梯度爆炸的解决方案
  • 2026 上海宝山区环保装修公司推荐|低甲醛材料即装即住家装排行榜 - 资讯报道
  • 深入理解C++ std::bind:从核心机制到实战应用