|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
import time as t
import calendar as c
class CalcTime:
def __init__(self):
self.begin_time = []
self.end_time = []
self.prompt = '未开始计时!'
self.unit = ['年', '月', '天', '时', '分', '秒']
self.long_list = []
def __str__(self):
return self.prompt
__repr__ = __str__
def __add__(self,other):
prompt = ''
result = []
for i in range(6):
result.append(self.long_list[i] + other.longlist[i])
prompt += str(result[i]) + self.unit[i]
return self.prompt
def start(self):
self.prompt = '请先调用stop()停止计时!!'
self.begin_time = t.localtime()
print('计时开始...')
def stop(self):
if not self.begin_time:
print('请先调用start()开始计时!!')
else:
self.end_time = t.localtime()
self.cal()
print(self.long_list)
print('计时结束...')
def cal(self):
self.long_str = ''
self.moth = 0
self.index = 0
self.prompt = '总共运行了'
#得出两个时间点 年月日时分秒 相差的数值(可能为负)依次加入列表中
for i in range(6):
self.index = self.end_time[i] - self.begin_time[i]
self.long_list.append(self.index)
#若数值为负,处理后得出正确的时间列表
while True:
#月
if self.long_list[1] < 0:
self.long_list[0] = self.long_list[0] - 1
self.long_list[1] = 12 + self.long_list[1]
#日
if self.long_list[2] < 0:
self.long_list[1] = self.long_list[1] - 1
#计算self.end_time当中的月份有多少天
self.month = (c.monthrange(self.end_time[0],self.end_time[1]))[1]
self.long_list[2] = self.month + self.long_list[2]
#时
if self.long_list[3] < 0:
self.long_list[2] = self.long_list[2] - 1
self.long_list[3] = 24 + self.long_list[3]
#分
if self.long_list[4] < 0:
self.long_list[3] = self.long_list[3] - 1
self.long_list[4] = 60 + self.long_list[4]
#秒
if self.long_list[5] < 0:
self.long_list[4] = self.long_list[4] - 1
self.long_list[5] = 60 + self.long_list[5]
break
for i in range(6):
self.prompt += str(self.long_list[i]) + self.unit[i]
#恢复初始和结束时间
self.begin_time = []
self.end_time = []
运行单个正常,但两个对象相加时始终报错(self.result.append(self.long_list[i] + other.longlist[i])
AttributeError: 'CalcTime' object has no attribute 'longlist'),可longlist属性明明就有的啊
求大佬协助!
本帖最后由 Twilight6 于 2020-7-12 00:11 编辑
第一个错误: result.append(self.long_list[i] + other.longlist[i])
的 longlist 少了个 下划线,改成result.append(self.long_list[i] + other.long_list[i])
即可
第二个错误:__add__ 返回的是实例变量 self.prompt 而不是你 __add__ 里面设置的 prompt ,把 return self.prompt 改成 return prompt 即可
正确参考代码:
import time as t
import calendar as c
class CalcTime:
def __init__(self):
self.begin_time = []
self.end_time = []
self.prompt = '未开始计时!'
self.unit = ['年', '月', '天', '时', '分', '秒']
self.long_list = []
def __str__(self):
return self.prompt
__repr__ = __str__
def __add__(self, other):
prompt = ''
result = []
for i in range(6):
result.append(self.long_list[i] + other.long_list[i])
print(result[i])
prompt += str(result[i]) + self.unit[i]
return prompt
def start(self):
self.prompt = '请先调用stop()停止计时!!'
self.begin_time = t.localtime()
print('计时开始...')
def stop(self):
if not self.begin_time:
print('请先调用start()开始计时!!')
else:
self.end_time = t.localtime()
self.cal()
print(self.long_list)
print('计时结束...')
def cal(self):
self.long_str = ''
self.moth = 0
self.index = 0
self.prompt = '总共运行了'
# 得出两个时间点 年月日时分秒 相差的数值(可能为负)依次加入列表中
for i in range(6):
self.index = self.end_time[i] - self.begin_time[i]
self.long_list.append(self.index)
# 若数值为负,处理后得出正确的时间列表
while True:
# 月
if self.long_list[1] < 0:
self.long_list[0] = self.long_list[0] - 1
self.long_list[1] = 12 + self.long_list[1]
# 日
if self.long_list[2] < 0:
self.long_list[1] = self.long_list[1] - 1
# 计算self.end_time当中的月份有多少天
self.month = (c.monthrange(self.end_time[0], self.end_time[1]))[1]
self.long_list[2] = self.month + self.long_list[2]
# 时
if self.long_list[3] < 0:
self.long_list[2] = self.long_list[2] - 1
self.long_list[3] = 24 + self.long_list[3]
# 分
if self.long_list[4] < 0:
self.long_list[3] = self.long_list[3] - 1
self.long_list[4] = 60 + self.long_list[4]
# 秒
if self.long_list[5] < 0:
self.long_list[4] = self.long_list[4] - 1
self.long_list[5] = 60 + self.long_list[5]
break
for i in range(6):
self.prompt += str(self.long_list[i]) + self.unit[i]
# 恢复初始和结束时间
self.begin_time = []
self.end_time = []
|
|