前言:
学习了python的类之后收获颇多,于是想利用类创建一个简单的计时器
第一代版本
首先要明确自己的timer想要实现的功能…先列一些简单的吧
比如:开始计时的功能,停止计时的功能,有一些简单的提示语…
还有一个问题,叫什么名字呢…
既然我们同属地球人,那就叫EarthTimer吧,额,就叫ETimer算了
import time as t
class ETimer:
"""创建一个计时器的类"""
# 初始化一些可能会用到的变量
def __init__(self):
self.begin = 0
self.end = 0
self.lasted = 0
# 开始计时
def start(self):
self.begin = t.time()
print("计时开始...")
# 停止计时,并显示持续时间
def stop(self):
self.end = t.time()
print("计时结束...")
self.lasted = self.end - self.begin
# 报出持续时间
print(f'持续了{self.lasted}秒')
好了,以上就是最简单的雏形,能实现简单的计时,报时功能,采用实例化类对象的方法调用
但是简单的缺点也很明显,如果改变方法的调用顺序,程序就会报错,因此,应该有相应的处理措施
第二代版本
要应对不同的情况,if语句能充分发挥作用
import time as t
class ETimer:
"""创建一个计时器的类"""
# 初始化一些可能会用到的变量
def __init__(self):
self.begin = 0
self.end = 0
self.lasted = 0
print("请调用start开始计时...")
# 开始计时
def start(self):
# 已调用过start方法
if self.begin:
print("请调用stop停止计时...")
else:
self.begin = t.time()
print("计时开始...")
# 停止计时,并显示持续时间
def stop(self):
# 如果未先调用start方法
if self.begin == 0:
print("请调用start方法开始计时...")
else:
self.end = t.time()
print("计时结束...")
self.lasted = self.end - self.begin
# 报出持续时间
print(f'持续了{self.lasted}秒')
# 初始化变量
self.begin = 0
self.end = 0
这样的话,提示就变得更加人性化了,也能防止用户在一定程度的操作失误的情况下,防止程序崩溃
但是,对于一个正常的计时器,要实现的功能远不止于此,我不能因为自己技术的贫困而放弃对美好事物的追求。也许在计时过程中还会用到多次调用,以及调用以前的记录,或者将几次记录相加,应该在代码中加入相应的功能
魔法方法
在学习过程中,我了解到python在使用运算符还有调用某个变量时,会调用其对应的类的某种方法来实现前面的功能。
比如:python遇到 “+” 运算符时,会调用内部的__add__()方法;调用变量时,会调用内部的__repr__()方法;调用print函数时,python会调用内部的__str__()方法…这些都是python的魔法方法
我们可以重写这些魔法方法,使其在我们创建的类中有额外的功效,也就是定制我们自己的类方法
重写__rper__()方法,使我们在交互式python解释器下通过直接输入对象就可以调出相应值。(注:rper()方法的返回值必须是字符串,而且必须有返回值,如果用print()方法代替输出,就会出现无限套娃,str()方法也是一样)
# 重写__rper__方法
def __repr__(self):
if self.lasted == 0:
return "没有该条记录..."
else:
return f"该条记录为{self.lasted}秒"
通过重写__add__方法,使得在调用两次计时的记录并把他们相加时,能得到我们想想要的结果
# 重写__add__方法
def __add__(self, other):
if self.lasted * other.lasted == 0:
return "缺少该条记录..."
else:
return f"总共为 {self.lasted + other.lasted} 秒"
现在,只要通过实例化方法创建对象,我们的计时器能实现相当大部分的功能
通过类似的方式,也可以向计时器添加更多的功能…
反思与感悟
在python中,一切皆对象。数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象,包括你的代码。
了解python的一些魔法方法,或者重写它们,会达到意想不到的效果,比如将加减法互换…
在学习python的过程中总能发现一些新乐趣,这些东西总能激起我学习的动力
参考资料
原文链接:https://blog.csdn.net/JesseGrowing/article/details/112546313