前言:

学习了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

python自己做个定时器_python 创建一个自己的类计时器相关推荐

  1. python怎么定义空矩阵_Python创建一个空的稀疏矩阵

    我试图将一些真实数据解析为一个.mat对象,以便在我的 matlab脚本中加载. 我收到此错误: TypeError: 'coo_matrix' object does not support ite ...

  2. python如何创建一个列表_使用python中的format()创建一个列表(make a list using format() in python)...

    使用python中的format()创建一个列表(make a list using format() in python) 我是python和编码的新手. 因此,如果已经讨论过这件事,我很抱歉,我无 ...

  3. 【Python 3.7】河流:创建一个字典,在其中存储三条大河流及其流经的国家。其中一个键 — 值对可能是 'nile': 'egypt' 。

    [Python 3.7]河流:创建一个字典,在其中存储三条大河流及其流经的国家.其中一个键 - 值对可能是 'nile': 'egypt' . 题目:河流:创建一个字典,在其中存储三条大河流及其流经的 ...

  4. JAVA 计算圆的面积和周长: 创建一个圆Circle类。为该类提供一个变量r表示半径,一个常量PI表示圆周率; * 同时为该类提供两个方法:方法一用于求圆的面积,方法二用于求圆的周长;

      插一句嘴,现在扎扎实实地把这些基础地敲一遍,理解了,可能还是会忘记.但是你最后学习的是做题的思路,而不是单纯的记代码.代码忘了再回过头来看一遍就好了,思路是别人偷不走的.[2022-9] * 思路 ...

  5. java存款输入密码类,创建一个银行账户类,包括账号、用户姓名、密码和余额属性,实现开户、查询余额、取款、存款功能。...

    用类与对象创建一个银行账户类.银行账户类包括账号.用户姓名.密码和余额属性,银行账户类的功能包括: 开户 查询余额 取款 存款 功能实现思路: 开户方法 Account(),创建账户的账号.密码.姓名 ...

  6. 【java】创建一个顶层框架类的对象

    创建一个顶层框架类的对象 package p1; import javax.swing.*; import java.awt.*; public class Java_3{static final i ...

  7. truck 用法java_编写Java程序,创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck)。...

    返回本章节 返回作业目录 需求说明: 创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck). 父类有属性品牌(brand)和颜色(color). 在父 ...

  8. 创建一个抽象类动物类以及以下几个接口:进食的接口、睡觉的接口、思考的接口、说话的接口。分别定义猫类、人类、鸟类继承动物类并选择实现上述的接口,并创建实例验证。

    创建一个抽象类动物类以及以下几个接口:进食的接口.睡觉的接口.思考的接口.说话的接口.分别定义猫类.人类.鸟类继承动物类并选择实现上述的接口,并创建实例验证. 上代码 package ThirdDay ...

  9. Java基础 创建一个账户Account类,该类有id:账户号码(长整数),password:账户密码,name:真实姓名

    题目: 创建一个账户Account类,该类有id:账户号码(长整数),password:账户密码,name:真实姓名,personId:身份证号码 字符串类型,email:客户的电子邮箱,balanc ...

最新文章

  1. Nginx及其架构设计
  2. arm单片机中函数参数的传递
  3. [转] PHP在不同页面之间传值的三种常见方式
  4. mac的python在哪里_python位置在mac osx
  5. Item 添加事件 list grally等
  6. 浏览器访问pdf 的url怎么加密_怎么解决加密的pdf文件?
  7. android 控件 margin,Android MarginDesign控件TabLayout导航栏使用详解
  8. 【论文笔记】一种有效攻击BERT等模型的方法
  9. matlab从哪里学,从零开始学MATLAB(附光盘)/从零开始学系列
  10. Qt Creator 使用技巧(功能快捷键如注释、声明和实现之间切换)
  11. 【电子书资源】数值方法最优化理论算法凸优化 ---书籍调研(附网盘下载地址)...
  12. CWDM SFP彩光模块知识百科
  13. python爬虫自动下载网页链接
  14. Apache Flink如何处理背压
  15. 初识测开/测试- 细节狂魔 - 测开/测试方向
  16. 微信支付分免密支付接口服务如何开通?
  17. 解决CentOS7(无限登录)登录后又跳转到登录页面的问题
  18. 【蓝桥杯】2015初赛 三羊献瑞
  19. 必备技能21:正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。
  20. 联想ideapad110-151kb

热门文章

  1. docker集群运行在calico网络上
  2. ES6特性之:Spread操作符
  3. 开源Registry项目Harbor源代码结构解析
  4. c/c++如何获取数组的长度
  5. centos不能挂在ntfs
  6. java.util.concurrent.RejectedExecutionException
  7. 详解:JVM内存调优参数
  8. 如何将本地项目上传到gitee
  9. Springboot与Spring的关系
  10. linux 扫描mipi设备,VS-RK3399 在linux系统下面调试Mipi camera接口介绍