python45课魔法方法计算时间
我自己写了一个代码,但是很短,相比于课后作业的答案少了很多东西,而课后作业里面的一些东西我看不懂,所以来问一下鱼油们先发一下我自己的代码,自己试过没有错误,只实现了求时间,没有加法
import time as t
class Time():
def __init__(self):
print("未开始计时")
self.begin = 0
self.end = 0
self.temp = 0
def start(self):
self.begin = t.perf_counter()
print("计时开始")
def stop(self):
self.end = t.perf_counter()
print("计时结束")
def result(self):
self.temp = self.end - self.begin
self.prompt = "运行了%.2f秒" % self.temp
self.begin = 0
self.stop = 0
print(self.prompt)
接下来是课后作业的答案代码,里面有一些不懂的地方,我把它发评论区,麻烦鱼油们解答一下呗{:10_297:}
import time as t
class MyTimer:
def __init__(self):
self.prompt = "未开始计时!"
self.lasted = 0.0
self.begin = 0
self.end = 0
self.default_timer = t.perf_counter
def __str__(self):
return self.prompt
__repr__ = __str__
def __add__(self, other):
result = self.lasted + other.lasted
prompt = "总共运行了 %0.2f 秒" % result
return prompt
# 开始计时
def start(self):
self.begin = self.default_timer()
self.prompt = "提示:请先调用 stop() 停止计时!"
print("计时开始...")
# 停止计时
def stop(self):
if not self.begin:
print("提示:请先调用 start() 进行计时!")
else:
self.end = self.default_timer()
self._calc()
print("计时结束!")
# 内部方法,计算运行时间
def _calc(self):
self.lasted = self.end - self.begin
self.prompt = "总共运行了 %0.2f 秒" % self.lasted
# 为下一轮计时初始化变量
self.begin = 0
self.end = 0
# 设置计时器(time.perf_counter() 或 time.process_time())
def set_timer(self, timer):
if timer == 'process_time':
self.default_timer = t.process_time
elif timer == 'perf_counter':
self.default_timer = t.perf_counter
else:
print("输入无效,请输入 perf_counter 或 process_time")
第11行到第14行
def __str__(self):
return self.prompt
__repr__ = __str__
写这些的目的是什么呢?
引用t.perf_counter是,它返回的是数字吗?
我看这里第38行是直接相减了
self.lasted = self.end - self.begin
答案中的所有的输入提示和输出好像都是用self.prompt进行的 这个def __str__(self):
return self.prompt
__repr__ = __str__
唉,真的是迷死我了,不知道他是干嘛的 小甲鱼的铁粉 发表于 2020-6-26 12:27
这个def __str__(self):
return self.prompt
当你对这个类使用 print 时候就会自动调用 __str__ 了
若 __repr__ 和 __str__ 同时存在的时候即 __repr__ = __str__
在IDLE 或者其他编译器 Python 控制台下实例化对象后,对该对象回车的时候回自动调用. 小甲鱼的铁粉 发表于 2020-6-26 12:25
答案中的所有的输入提示和输出好像都是用self.prompt进行的
引用t.perf_counter是,它返回的是数字吗?
我看这里第38行是直接相减了
t.perf_counter 是一个 time 模块的函数,加上括号之后代表调用函数
答案中的所有的输入提示和输出好像都是用self.prompt进行的
这里直接用一个变量来进行改变提示语,因为每个方法都有对 self.prompt 的重新赋值,也就是调用了哪个方法 提示语就变成了那个方法的赋值的字符串
Twilight6 发表于 2020-6-26 12:36
当你对这个类使用 print 时候就会自动调用 __str__ 了
若 __repr__ 和 __str__ 同时存在的时候即 _ ...
那我不写这个可以吗?按我自己的代码那样{:10_297:} Twilight6 发表于 2020-6-26 12:40
t.perf_counter 是一个 time 模块的函数,加上括号之后代表调用函数
懂了{:10_275:} 小甲鱼的铁粉 发表于 2020-6-26 12:40
那我不写这个可以吗?按我自己的代码那样
可以的 只是你需要调用 result 方法 而甲鱼哥只要直接输入实例对象就可以查看了,他的比较方便嘿嘿 Twilight6 发表于 2020-6-26 12:42
可以的 只是你需要调用 result 方法 而甲鱼哥只要直接输入实例对象就可以查看了,他的比较方便嘿嘿
嗯{:10_275:}
页:
[1]