|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第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[index] - self.st[index])
- if self.lasted[index]:
- self.prompt += str(self.lasted[index]) + self.unit[index]
- # 为下一轮计时初始化变量
- self.st = 0
- self.sp = 0
复制代码
你先要了解下这 __str__ 和 __repr__ 方法的作用:
__str__方法其实是在print()对象时调用,所以可以自己定义 str 字符串的返回信息,在该方法 return 一个字符串,如果不是字符串则报错
__repr__ 魔法方法:是在控制台直接输出一个对象信息或者print一个对象信息时调用
如果自定了__str__ ,print 时默认执行__str__
如果没有自定 __str__ ,则 print 时执行 __repr__
这里你调用 t1 时候是指 t1 实例对象,所以会自动调用 __repr__ 魔法方法然后返回字符串
而你调用 t1.stop() 是调用 t1 对象的 stop 方法,并不会自动调用 __repr__ 魔法方法,所以不会自己打印
|
|