python自己做个定时器_python 创建一个自己的类计时器

前言:

学习了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}秒')

好了,以上就是最简单的雏形,能实现简单的计时,报时功能,采用实例化类对象的方法调用

c64324492aa08bbe13c3636069213588.png

但是简单的缺点也很明显,如果改变方法的调用顺序,程序就会报错,因此,应该有相应的处理措施

第二代版本

要应对不同的情况,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

这样的话,提示就变得更加人性化了,也能防止用户在一定程度的操作失误的情况下,防止程序崩溃

ed473b4e9297a4efcdc1c78ccc6805db.png

但是,对于一个正常的计时器,要实现的功能远不止于此,我不能因为自己技术的贫困而放弃对美好事物的追求。也许在计时过程中还会用到多次调用,以及调用以前的记录,或者将几次记录相加,应该在代码中加入相应的功能

魔法方法

在学习过程中,我了解到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} 秒"

现在,只要通过实例化方法创建对象,我们的计时器能实现相当大部分的功能

9874025bdc923dc482df82d5d6b7a7e1.png

1b00b11cbac0720d15a485779ccd796b.png

197c52c80a2cc86ca5680e823256ba86.png

通过类似的方式,也可以向计时器添加更多的功能…

反思与感悟

在python中,一切皆对象。数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象,包括你的代码。

了解python的一些魔法方法,或者重写它们,会达到意想不到的效果,比如将加减法互换…

在学习python的过程中总能发现一些新乐趣,这些东西总能激起我学习的动力

参考资料

原文链接:https://blog.csdn.net/JesseGrowing/article/details/112546313

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript 懒加载技术(lazyload)简单实现

1.前言   懒加载技术(简称lazyload)并不是新技术, 它是js程序员对网页性能优化的一种方案.lazyload的核心是按需加载.在大型网站中都有lazyload的身影,例如谷歌的图片搜索页,迅雷首页,淘宝网,QQ空间等.因此掌握lazyload技术是个不错的选择,可惜jquery插件lazy loa…

ORACLE 全文搜索(精度高排前)

select * from tab_name order by decode(instr(id, ab), 0, 9999, instr(id, ab)), decode(instr(id, ab, 2), 0, 9999, instr(id, ab, 2)), id

HttpWebRequest模拟POST提交防止中文乱码

测试通过,请求的为自己写的一般处理程序,代码如下: 代码 Encoding myEncoding Encoding.GetEncoding("gb2312");stringparam HttpUtility.UrlEncode("aa", myEncoding) ""HttpUtility.UrlEncode("值A&quo…

笔试题--Multicore简答题(下)

1.面向对象的特征 封装封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写…

手把手带你玩转Tensorflow 物体检测 API (1)——运行实例

本文在学习《Tensorflow object detection API 搭建属于自己的物体识别模型(1)——环境搭建与测试》的基础上优化并总结,此博客链接:https://blog.csdn.net/dy_guox/article/details/79081499,感谢此博客作者。 0.前言…

netframework 4.0内置处理JSON对象

前言 必须的是 .netframewoke 4.0的项目才能使用。 内容 1.项目添加System.Runtime.Serialization引用。 2.JsonHelper通用类的代码如下: using System;using System.Text;//--------------------------usingusing System.Runtime.Serialization.Json; // 添加引…

html5 java 图片上传_java实现图片上传至服务器并显示,如何做?希望要具体的代码实现...

展开全部有两种方法一是用上传的组建jspSmartUpload的Request,还有一种不用组建,但在e69da5e6ba9062616964757a686964616f31333238653233form表单中不能加入ENCTYPE "multipart/form-data "我给你的案例吧建立后台数据库if exists (select * f…

CISCO的GLBP(网关负载均衡协议)

名词定义:活动虚拟网关AVG: 它的优先级最高,应答所有ARP请求,反回哪个MAC地址,取决于采用的负载均衡方式AVG还给GLBP组中的每台路由器分配虚拟MAC地址,最多每个组可以分到4个,组里的每台路由器都被称为活动…

net发布的dll方法和类显示注释信息(字段说明信息)[图解]

自己发布的dll添加的另一个项目中突然没有字段说明信息了,给使用带来了很多的不便,原因是为了跨项目引用,所以导致不显示注释信息的,一下是解决这个问题的方法。 在要发布(被引用)的项目上右键 > 属性 &…

手把手带你玩转Tensorflow 物体检测 API (2)——数据准备

致谢声明 本文在学习《Tensorflow object detection API 搭建属于自己的物体识别模型(2)——训练并使用自己的模型》的基础上优化并总结,此博客链接:https://blog.csdn.net/dy_guox/article/details/79111949,感谢此博…

windows phone 学习(4)

1.Windows Phone8比Windows Phone7多了哪些:支持C(组件级的补充,主体还是C#);采用Windows 8 SDK;更多API;2.普通的手机只能通过MarketPlace这个唯一的渠道下载安装软件,开发者帐户机制&#xff…

判断dll是版本(Debug Or Release)[测试通过]

简单的代码,google搜索提炼和分析,主要是利用反射技术,测试通过,抛砖引玉,自娱自乐,多多指教。 publicpartialclass_Default : System.Web.UI.Page{ protectedvoidPage_Load(objectsender, EventArgs e)…

手把手带你玩转Tensorflow 物体检测 API (3)——训练模型

致谢声明 本文在学习《Tensorflow object detection API 搭建属于自己的物体识别模型(2)——训练并使用自己的模型》的基础上优化并总结,此博客链接:https://blog.csdn.net/dy_guox/article/details/79111949,感谢此博…

动态类型var和dynamic和传统确定类型区别和效率

伴随着vs2010的出现,c#4.0的诞生,与之而来的动态类型dynamic更是给net程序员们锦上添花,为自己的程序书写上带来了给大的便利。可到底怎么用,好不好用,效率这么样,也许是大家最迫切关注的,msdn虽…

epel yum源

如果既想获得 RHEL 的高质量、高性能、高可靠性,又需要方便易用(关键是免费)的软件包更新功能,那么 Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux)正好适合你。EPEL(http://fedoraproject.org/wiki/EPEL) 是由 Fedora 社区打造&…

Windows 7 设置devenv.exe启动版本

我机子上装了有vs 05、vs 08、vs 10如果按上顺序安装的话,在 运行 > devenv 就可以打开最新的vs10 工具,如果顺序是乱的话,就没那么幸运了,也就是说你最后安装的版本将会被你的 devenv 命令打开,原因是最后一次安装…

手把手带你玩转Tensorflow 物体检测 API (4)—— 模型验证

致谢声明 本文在学习《Tensorflow object detection API 搭建属于自己的物体识别模型(2)——训练并使用自己的模型》的基础上优化并总结,此博客链接:https://blog.csdn.net/dy_guox/article/details/79111949,感谢此博…

java 获得文件的行数据_Java 读取文件指定行数据

public class ReadFileDemo1 {/*** 获取错误文件中的记录号* param sourceFile* return*/public static int[] readBadFile(String sourceFile){FileReader in null;LineNumberReader reader null;int[] array new int[0];try {//获取文件总行数long totalLine Files.lines…

几款浏览器JavaScript调试工具

WEB开发工具的使用已经非常普及,如果想要更方便于开发的话,不妨看看本文介绍的15款基于浏览器扩展的WEB开发工具。 1.Firebug Firebug是一款基于Firefox的浏览器扩展组件,它集成了网页CSS ,文档对象模型( DOM )和JavaScript调试技…

mysql tomcat列表增删改查_Tomcat-Database

Tomcat-Database介绍根据Tomcat9源码二次开发,增加数据库功能,可一行代码实现CURD安装教程需要先配置Ant,然后在根目录下执行ant命令,即可编译,编译后的目录在Tomcat-Database/output/build下,其中在bin下可…