Python中这段面向对象编程代码运行失败,如何修复?
问题修复:Python类中实例属性与方法同名导致的TypeError错误
原代码
class Bike: def __init__(self, speed): self.speed = speed def speed(self): if (self.speed) > 120: print("You are driving fast.") else: print("You are diving safely.") bike1 = Bike(32) bike1.speed()
报错信息
Traceback (most recent call last):
File "C:\Users\Syed\PycharmProjects\Muneer Python\Python Beginner Mosh\App.py", line 10, in
bike1.speed()
TypeError: 'int' object is not callable
错误原因
核心问题是实例属性与方法同名:
- 在
__init__方法中,你给实例绑定了名为speed的整数属性(self.speed = speed)。 - 同时定义了同名的
speed方法,实例创建后,属性会覆盖掉同名方法,导致调用bike1.speed()时,实际是在尝试调用一个整数,因此抛出TypeError。
修复方案
方案一:修改方法名
将speed方法重命名为不冲突的名称,比如check_speed:
class Bike: def __init__(self, speed): self.speed = speed def check_speed(self): if self.speed > 120: print("You are driving fast.") else: print("You are driving safely.") # 修正原代码拼写错误:diving → driving bike1 = Bike(32) bike1.check_speed()
方案二:修改属性名
将实例属性名改为其他名称,比如_speed,保留方法名为speed:
class Bike: def __init__(self, speed): self._speed = speed # 修改属性名避免冲突 def speed(self): if self._speed > 120: print("You are driving fast.") else: print("You are driving safely.") # 修正原代码拼写错误:diving → driving bike1 = Bike(32) bike1.speed()
内容的提问来源于stack exchange,提问作者SYED MUNEER
相关产品推荐
相关产品推荐

