W1ND123 发表于 2021-11-10 15:38:12

关于时间计时器的一点问题

import time as t

class Mytimer():
    def __init__(self):
      self.prompt = '未开始计时'
      self.unit = ['年', '月','日','小时','分钟','秒']
      self.lasted = []
      self.begin = 0
      self.end = 0
   
    def __str__(self):
      return self.prompt
    __repr__ = __str__
    #开始计时
    def start(self):
      self.begin = t.localtime() #这里命名容易出现问题,self.start属性名和方法名不要相同,因为属性会把方法覆盖
      self.prompt = '提示: 请先调用stop()开始计时'
      print('开始计时')
    #停止计时
    def stop(self):
      if not self.lasted:
            print('提示: 请先调用start()开始计时')
      else :
            self.end = t.localtime()
            self._calc()
            print('计时结束')

    #内部方法,计算运行时间
    def _calc(self):
      self.lasted = [] #持续的时间储存在这里
      self.prompt = '总共运行了'
      #这里要注意localtime是以元组的形式返回年月日时分秒
      for index in range(6):
            self.lasted.append(self.end - self.begin)
            if self.lasted:
                self.prompt += (str(self.lasted) + self.unit)
      #为下一轮计时初始化变量
      self.begin = 0
      self.end = 0
      
      
当你实例话的时候,例如
t1 = Mytimer()
t1.start()
t1.stop()
t2 = Mytimer()
t2.start()
t2.stop()
问题1:实例化对象不同,每一次的self.begin和self.end都是不同对象的变量,为什么还要在最后初始化呢
问题2:如果要初始化为什么不把self.lasted也初始化呢

傻眼貓咪 发表于 2021-11-10 18:14:54

问题 1 解答:
小明的时间和小花的时间就是两个不同对象的时间。假设小明训练跑步,每次跑步都想重新计时(看看跑步是否有进步)那么这里小明是不是每次都需要初始化时间呢?答案是当然,所以这个跟不同象没有任何关系(因为不管小花事)。

问题 2 解答:
至于为什么 self.lasted 没有初始化呢?答案是:有初始化(只是你没有看见),当调用 _calc() 函数时,第一句就是初始化 self.lasted = [](设 self.lasted = 空列表)

W1ND123 发表于 2021-11-10 19:46:42

傻眼貓咪 发表于 2021-11-10 18:14
问题 1 解答:
小明的时间和小花的时间就是两个不同对象的时间。假设小明训练跑步,每次跑步都想重新计时 ...

傻眼猫咪的回答总是那么的好
页: [1]
查看完整版本: 关于时间计时器的一点问题