Python调用@property属性时触发TypeError: 'float' object is not callable错误
问题分析与解决
错误原因
- 属性被当作方法调用:
salaryafterIncre被@property装饰为属性,访问时直接用e1.salaryafterIncre即可,加()会把属性返回的float值当成函数调用,导致TypeError: 'float' object is not callable。 - Setter定义不规范:
@salaryafterIncre.setter修饰的方法必须接收一个参数(即使逻辑上不需要使用该参数),否则无法正常触发setter逻辑。
修正后的代码
class Employee: def __init__(self, name, salary, increment): self.name = name self.salary = salary self.increment = increment @property def salaryafterIncre(self): return self.salary * (1 + self.increment) @salaryafterIncre.setter def salaryafterIncre(self, _): # 添加占位参数符合setter规范 self.salary = self.salary * (1 + self.increment) e1 = Employee("shubh", 10000, 0.1) print(e1.salaryafterIncre) # 直接访问属性,无需括号 e1.salaryafterIncre = None # 通过赋值触发setter,值可任意(这里用占位参数忽略) print(e1.salary)
可选优化(按需调整)
如果希望setter支持自定义增量值,可以修改逻辑:
@salaryafterIncre.setter def salaryafterIncre(self, new_increment): self.increment = new_increment self.salary = self.salary * (1 + self.increment) # 调用时传入新增量 e1.salaryafterIncre = 0.2
内容的提问来源于stack exchange,提问作者Shubham Rampurkar
相关产品推荐
相关产品推荐

