当前位置: 首页 > 网络知识

Python基础入门学习笔记 044 魔法方法:简单定制

时间:2026-01-29 09:25:50

简单定制

•基本要求:

–定制一个计时器的类

–start和stop方法代表启动计时和停止计时

–假设计时器对象t1,print(t1)和直接调用t1均显示结果

–当计时器未启动或已经停止计时,调用stop方法会给予温馨的提示

–两个计时器对象可以进行相加:t1 + t2

–只能使用提供的有限资源完成

你需要这些资源

•使用time模块的localtime方法获取时间

•time.localtime返回struct_time的时间格式

•表现你的类:__str__ 和 __repr__

1 import time as t #导入时间模块,调用对象t 2 3 class Mytimer(): 4 def __init__(self): 5 self.unit = ['年','月','天','小时','分钟','秒'] 6 self.prpt = "未开始计时" 7 self.lasted = [] 8 self.begin = 0 #属性 9 self.end = 0 10 def __str__(self): 11 return self.prpt 12 13 __repr__ = __str__ 14 15 def __add__(self,other): #重写加法操作符,运行时间相加 16 prpt = "总共运行了" 17 result = [] 18 for index in range(6): 19 result.append(self.lasted[index] + other.lasted[index]) 20 if result[index]: 21 prpt += (str(result[index]) + self.unit[index]) 22 return prpt 23 24 #开始计时 25 def start(self): #方法,属性名和方法名不能相同 26 if not self.stop: 27 self.prpt = ("提示:请先调用stop()停止计时!") 28 else: 29 self.begin = t.localtime() 30 print('计时开始...') 31 32 #停止计时 33 def stop(self): 34 if not self.begin: 35 print('提示:请先调用start()进行计时!') 36 else: 37 self.end = t.localtime() 38 self._calc() 39 print('计时结束!') 40 41 #内部方法,计算运行时间 42 def _calc(self): 43 self.prpt = "总共运行了" 44 for index in range(6): 45 self.lasted.append(self.end[index] self.begin[index]) 46 if self.lasted[index]: 47 self.prpt += (str(self.lasted[index]) + self.unit[index]) 48 #为下一轮计时初始化变量 49 self.begin = 0 50 self.end = 0 51 52 >>> t1 = Mytimer() 53 >>> t1.stop() 54 提示:请先调用start()进行计时! 55 >>> t1.start() 56 计时开始... 57 >>> t1.stop() 58 计时结束! 59 >>> t1 60 总共运行了4秒 61 >>> t2 = Mytimer() 62 >>> t2.start() 计时开始... 64 >>> t2.stop() 65 计时结束! 66 >>> t2 67 总共运行了4秒 68 >>> t1 + t2 69 '总共运行了8秒'

进阶定制

•如果开始计时的时间是(2022年2月22日16:30:30),停止时间是(2025年1月23日15:30:30),那按照我们用停止时间减开始时间的计算方式就会出现负数(3年1月1天1小时),你应该对此做一些转换。

•现在的计算机速度都非常快,而我们这个程序最小的计算单位却只是秒,精度是远远不够的。



上一篇:Python基础入门学习笔记 032 异常处理:你不可能总是对的
下一篇:Python基础入门学习笔记 036 类和对象:给大家介绍对象
python
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素