为何Python类函数命名'restart'会触发TypeError错误?
问题原因解析:TypeError: 'int' object is not callable
你的问题核心是方法名和实例属性重名,再加上方法定义时缺少必要的self参数,共同导致了报错,具体拆解:
实例方法必须带
self参数
你的restart方法定义时没有写self作为第一个参数,Python中类的实例方法默认会把实例本身作为第一个参数传递进去,没加self的话,第一次调用thing.restart()就会触发参数不匹配的错误——而你遇到的int不可调用报错,说明实际代码里可能已经通过其他方式给self.restart赋过整数值,或是第一次调用执行到赋值语句后,后续调用触发了这个错误。方法名与属性重名覆盖
在restart方法里,你写了self.restart = True,这行代码会把实例的restart属性从原本指向方法的对象,覆盖成布尔值True(如果是int类型就是整数值)。当你之后再试图调用thing.restart()时,实际上是在尝试调用这个已经被覆盖成非函数类型的属性,自然就会抛出TypeError: 'int' object is not callable的错误。
修正方案
- 给所有实例方法加上第一个参数
self,这是Python的语法要求; - 把方法名或者属性名改个名字,避免重名冲突,比如把方法改成
restart_game,属性改成is_restart:
class score_screen(): def __init__(self): # 先初始化需要用到的属性 self.points = 0 self.loss = 0 def restart_game(self): self.final_score = (25 * self.points) - self.loss self.is_restart = True thing = score_screen() thing.restart_game()
内容的提问来源于stack exchange,提问作者Space Cat
相关产品推荐
相关产品推荐

