Python 3.9中@property的getter与setter报错问题求助
问题分析与解决
你的代码报错是因为**@property的使用方式完全错误**,核心问题出在getter和setter的命名绑定上:
错误原因
- @property装饰的方法名应该是你要对外暴露的属性名(比如
height),而不是带get_前缀的get_height - 对应的setter必须使用和getter完全相同的方法名,通过
@属性名.setter装饰,不能另起set_height这样的名字
你原来的写法中,@get_height.setter装饰set_height方法,这并不能为get_height属性创建有效的setter,反而会导致set_height被当成普通方法,加上父类ForeignClass的潜在影响,最终触发'int' object is not callable错误。
修正后的代码
class Square(ForeignClass): def __init__(self, height=0, width=0): self._height = height self._width = width @property def height(self): return self._height @height.setter def height(self, height_param): self._height = height_param A_obj = Square(90, 90) print(A_obj.height) # 直接访问属性,无需加括号 A_obj.height = 777 # 直接赋值来设置属性 print(A_obj.height)
关键说明
- 用
@property装饰height方法后,你可以像访问普通属性一样用A_obj.height获取值,不用加括号调用 @height.setter装饰同名的height方法后,就可以通过赋值语句A_obj.height = 777来设置内部的_height值- 内部用
_height存储数据是Python的约定,表示这个属性是类内部使用的,不建议外部直接修改
内容的提问来源于stack exchange,提问作者jhoanmartinez
相关产品推荐
相关产品推荐

