|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 = []
复制代码
|
|