小甲鱼Python学习笔记

需求目标

  • 核心功能:start(开始计时)、stop(停止计时)
  • 显示要求:print 对象/直接调用对象 → 显示计时结果
  • 提示要求:未启动/已停止时操作 → 温馨提示
  • 扩展功能:两个计时器对象可相加,结果为时间总和
  • 资源限制:仅使用 time.localtime() 获取时间

核心实现步骤

  1. 导入模块:import time
  2. 类初始化(init
    • 定义属性:begin、end(计时起止时间,初始为0)
    • lasted(存储时间差值的列表)
    • prompt(提示信息,初始为"未开始计时")
    • unit(时间单位列表:年、月、日、时、分、秒)
  3. start 方法
    • 判断:若 begin 非0 → 提示"请先调用 stop 停止计时"
    • 正常执行:记录 begin = time.localtime(),提示"计时开始"
  4. stop 方法
    • 判断:若 begin 为0 → 提示"请先调用 start 开始计时"
    • 正常执行:记录 end = time.localtime(),调用内部计算方法
    • 计算后初始化 begin、end 为0,为下一轮计时准备
  5. 内部计算方法(_calc)
    • 遍历前6个时间元素(年到秒),计算 end 与 begin 的差值,存入 lasted
    • 拼接提示信息:非零时间值 + 对应单位 → 生成 prompt

显示功能实现(魔法方法)

  • 重写 str:返回 self.prompt
  • 重写 repr:令 repr = str,实现直接调用对象显示结果

对象相加功能(add

  • 参数:self(自身对象)、other(另一个计时器对象)
  • 逻辑:遍历 lasted 列表,对应位置时间值相加
  • 拼接新提示信息:"总共运行了 X年X月X日X时X分X秒"
  • 返回拼接后的字符串

避坑要点

  • 方法名与属性名冲突:避免属性名用 start/stop,否则会覆盖方法
  • 初始化属性:所有实例属性需在 init 中定义,防止未定义报错
  • 时间差值处理:直接相减会出现负数(如 1月 - 2月 = -1月),需进阶转换

现存不足

  • 时间差值未做负数转换(如负月/负时转成合理正数)
  • 计时精度仅到秒,可优化提升精度