python 43课 计时器视频课程,求详解
本帖最后由 huyanmin 于 2021-3-20 15:20 编辑#下面是小甲鱼43课关于计时器的源代码
import time as t
class MyTimer():
def __init__(self):
self.unit = ['年','月','天','小时','分','秒']
self.lasted = []
self.prompt = '未开始计时'
self.begin = 0
self.end = 0
def __repr__(self):
return self.prompt #此处的prompt带有self
__str__ = __repr__
#加法
def __add__(self,other):#此方法,是两个计时器对象相加,返回prompt局部变量
prompt='总共运行了'
result =[]
for index in range(6):
result.append(self.lasted+other.lasted)
if result:
prompt+=(str(result) + self.unit)
return prompt #此处的prompt不带有self,所以是局部变量,他的作用范围就在这个add方法中,那么它是如何改变上面repr方法中的self.prompt的呢?如果prompt和self.prompt是没
有关系的,它只是返回两个MyTimer实例的prompt的和,那么__str__方法中self.prompt 是如何随着add方法的返回值的改变而改变呢?难道str方法天生具有搜索实例对象相加,相减,等的返回值的功能吗?
#开始计时
def start(self):
self.begin = t.localtime()
self.prompt = '提示,请先调用stop方法,结束计时'
print('计时开始')
#计时结束
def stop(self):
if self.begin:
self.end = t.localtime()
self._calc()
print('计时结束')
else:
print('提示,请先调用start方法,开始计时')
#内部方法,计算运行时间
def _calc(self):
self.lasted = []
self.prompt = '总共运行了'
for index in range(6):
self.lasted.append(self.end-self.begin)
if self.lasted:
self.prompt += (str(self.lasted) + self.unit)
self.begin=0
self.end =0
这个prompt和self.prompt是没有关系的,它只是返回两个MyTimer实例的prompt的和罢了。
qiuyouzhi 发表于 2021-3-19 18:47
这个prompt和self.prompt是没有关系的,它只是返回两个MyTimer实例的prompt的和罢了。
如果prompt和self.prompt是没有关系的,它只是返回两个MyTimer实例的prompt的和罢了,那么__str__方法中self.prompt 是如何随着add方法的返回值的改变而改变呢 huyanmin 发表于 2021-3-20 14:52
如果prompt和self.prompt是没有关系的,它只是返回两个MyTimer实例的prompt的和罢了,那么__str__方法中s ...
?改变了吗 qiuyouzhi 发表于 2021-3-20 16:34
?改变了吗
视频中
>>>t1+t2后改变了 huyanmin 发表于 2021-3-22 06:56
视频中
>>>t1+t2后改变了
那肯定的啊
这就是__add__方法的定义啊
t1.prompt 和 t2.prompt是不变的
页:
[1]