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,一经查实,立即删除!

相关文章

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

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

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

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

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,感谢此博…

手把手带你玩转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虽…

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

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

mysql tomcat列表增删改查_Tomcat-Database

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

Kafka集群部署CentOS 7

一、前言 1、Kafka简介 Kafka是一个开源的分布式消息引擎/消息中间件,同时Kafka也是一个流处理平台。Kakfa支持以发布/订阅的方式在应用间传递消息,同时并基于消息功能添加了Kafka Connect、Kafka Streams以支持连接其他系统的数据(Elasticsearch、Had…

mysql+e+文件+xls_TP5+PHPexcel导入xls,xlsx文件读取数据

首先:在extend里面引入PHPexcel文件,直接根目录导入进去html创建上传按钮上传excel上传文件立即提交重置layui.use([form,upload],function(){var formlayui.form;var uploadlayui.upload;upload.render({ //允许上传的文件后缀elem: #myfile,url: "{:url(sale/do_uploa…

SQL Server 2008 FILESTREAM特性管理文件

在SQL Server 2008中,新的FILESTREAM(文件流)特性和varbinary列配合,你可以在服务器的文件系统上存储真实的数据,但可以在数据库上下文内管理和访问,这个特性让SQL Server不仅可以维护好数据库内记录的完整…

System.Drawing.Color转System.Windows.Media.Color

2019独角兽企业重金招聘Python工程师标准>>> //这是两个不同的类 System.Windows.Media.Color color (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString(transItemList[i].color.Name); 转载于:https://my.oschina.net/SearchVe…

Prometheus 监控Mysql服务器及Grafana可视化

Prometheus 监控Mysql服务器及Grafana可视化 mysql_exporter:用于收集MySQL性能信息。 使用版本mysqld_exporter 0.11.0官方地址使用文档:https://github.com/prometheus/mysqld_exporter图标模板:https://grafana.com/dashboards/7362下载…

Kafka集群部署搭建完美标准版

Kafka集群部署并启动 在本文中将从演示如何搭建一个Kafka集群开始,然后简要介绍一下关于Kafka集群的一些基础知识点。但本文仅针对集群做介绍,对于Kafka的基本概念不做过多说明,这里假设读者拥有一定的Kafka基础知识。 首先,我们…

Yolov4训练自己的数据集

Yolov4训练自己的数据集 代码运行环境Ubuntu18.04python3.6显卡1080TiCUDA10.0cudnn7.5.1OpenCV3.4.6Cmake3.12.2,详细环境配置安装步骤就不讲解拉,网上教程一大堆。从github克隆下载源码,链接地址:https://github.com/AlexeyAB/…

vs 2010 不显示解决方案文件

vs 2010 不显示解决方案文件的问题早就遇到过,而且也能很容易的解决,唯独这次太郁闷了,先说说之前的我办法吧,像往常一样,在工具栏里面找到 >工具>选项>项目和解决方案>常规>勾中“总是显示解决方案”&…

CentOS7 安装ownCloud

ownCloud的安装依赖LAMP环境,即 Linux Apache MySQL(Mariadb) PHP,所以在装owncloud前最好先装好这些,并且保证已经可用。 为了方便,本文在运行shell命令时都是以管理员用户身份运行(root权限下运行)&a…

java opencv 平移_Java中使用opencv

Java中使用opencvJava中使用opencv零、前言作为图像处理出身,不仅仅要会C图像处理、matlab图像处理、python图像处理、最起码也得会java图像处理,当然我最终还都用的是opencv这个机器视觉库了。今天简单介绍一下java中如何使用opencv。一、配置库(1)官网…