关于小甲鱼第44讲例题
第44讲主要是讲解一个定时器的类,有关魔法方法的问题:为什么调用t1.stop()方法时没有打印提示语句,不是和小甲鱼老师一样
代码如下:import time as t
class MyTimer:
def __init__(self):
self.unit = ['年', '月', '日', '十', '分', '秒']
self.prompt = '未开始计时!'
self.lasted = []
self.st = 0
self.sp = 0
def __str__(self):
return self.prompt
__repr__ = __str__
# 开始计时
def start(self):
self.st = t.localtime()
self.prompt = '提示:请先调用stop()停止计时!'
print('计时开始...')
# 停止计时
def stop(self):
if not self.st:
self.prompt = '提示:请先调用start()开始计时!'
else:
self.sp = t.localtime()
self.__calc()
print('计时结束!')
# 内部方法,计算运行时间
def __calc(self):
self.lasted = []
self.prompt = '总共运行了'
for index in range(6):
self.lasted.append(self.sp - self.st)
if self.lasted:
self.prompt += str(self.lasted) + self.unit
# 为下一轮计时初始化变量
self.st = 0
self.sp = 0 执行t1.stop(),仅把self.prompt 改为'提示:请先调用start()开始计时!',并没有print
可以这样看一下
你先要了解下这 __str__ 和 __repr__ 方法的作用:
__str__方法其实是在print()对象时调用,所以可以自己定义 str 字符串的返回信息,在该方法 return 一个字符串,如果不是字符串则报错
__repr__ 魔法方法:是在控制台直接输出一个对象信息或者print一个对象信息时调用
如果自定了__str__ ,print 时默认执行__str__
如果没有自定 __str__ ,则 print 时执行 __repr__
这里你调用 t1 时候是指 t1 实例对象,所以会自动调用 __repr__ 魔法方法然后返回字符串
而你调用 t1.stop() 是调用 t1 对象的 stop 方法,并不会自动调用 __repr__ 魔法方法,所以不会自己打印
但是小甲鱼老师演示的时候,调用stop()方法有提示信息{:10_277:}
fishc098 发表于 2020-7-11 19:29
但是小甲鱼老师演示的时候,调用stop()方法有提示信息
你没发现 stop 方法里面有明显的 print 吗? 而你的代码没有 print 所以没有打印
如果还没有调用 t1.start() 方法开始计时,t1.stop() 方法只会把 self.prompt 修改为 '提示:请先调用start()开始计时!',并不会打印,需要 print(t1) 或者直接输入 t1 才会打印。 fishc098 发表于 2020-7-11 19:29
但是小甲鱼老师演示的时候,调用stop()方法有提示信息
你没有完全按着他的代码抄,所以效果不一样 fishc098 发表于 2020-7-11 19:29
但是小甲鱼老师演示的时候,调用stop()方法有提示信息
你的这一句和小甲鱼老师不一样
哦哦,是我疏忽了{:10_269:}
谢谢大家
页:
[1]