这是因为方法名 `start` 和实例属性名 `start` 冲突导致的问题。
当你第一次调用 `t1.start()` 时,`start()` 方法正常被调用,并且在方法内部将 `self.start` 赋值为 `t.localtime()`,这在类实例上创建了一个属性 `start`。
第二次调用 `t1.start()` 时,Python 解释器发现 `self` 已经有一个名为 `start` 的属性,所以再调用 `t1.start()` 时,试图将其作为一个可以调用的函数来使用,但实际上它是 `time.struct_time` 对象,因此抛出了 `TypeError`。
为了解决这个问题,你可以选择不同的名字来命名属性和方法。例如,可以将属性名设为 `_start_time`,这样就不会与方法名冲突:
class MyTimer():
def __str__(self):
return self.prompt
__repr__ = __str__
def start(self):
self._start_time = t.localtime()
print('开始计时.....')
def stop(self):
self._stop_time = t.localtime()
self._calc()
print('计时结束!')
def _calc(self):
self.lasted = []
self.prompt = '总共运行了'
for i in range(6):
self.lasted.append(self._stop_time[i] - self._start_time[i])
self.prompt += str(self.lasted[i])
这样修改后,方法名和属性名就不会再冲突了,也就不会导致 `TypeError`。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |