You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用@property属性时触发TypeError: 'float' object is not callable错误

问题分析与解决

错误原因

  1. 属性被当作方法调用:salaryafterIncre被@property装饰为属性,访问时直接用e1.salaryafterIncre即可,加()会把属性返回的float值当成函数调用,导致TypeError: 'float' object is not callable。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:20:30