为何调整Python property函数参数顺序会引发报错?
为什么交换Python中property函数的参数顺序会触发错误?
Python的property()函数参数顺序是严格固定的,第一个参数对应属性获取器(getter),第二个对应属性设置器(setter),不能随意交换,原因如下:
参数顺序的定义规则
property()的官方签名为:
property(fget=None, fset=None, fdel=None, doc=None)
fget:读取属性时调用的方法,仅需接收self一个参数fset:赋值属性时调用的方法,需接收self和待设置的值两个参数- 后续的
fdel和doc分别对应属性删除方法和文档字符串,同样有固定位置
交换参数后的错误逻辑
当你把参数顺序改成property(set_age, get_age)时:
set_age被错误绑定为获取器,get_age被错误绑定为设置器- 执行
mark.age = 10时,Python会调用被当成设置器的get_age方法,但get_age仅定义了self一个参数,却被传入了self和10两个参数,直接触发TypeError - 即便赋值环节没报错,读取
mark.age时会调用set_age,但set_age需要两个参数,同样会因参数数量不匹配报错
正确逻辑的验证
原代码中property(get_age, set_age)的绑定完全符合方法定义:
- 赋值
mark.age = 10时调用set_age(self, 10),参数匹配 - 读取
mark.age时调用get_age(self),参数匹配
因此能正常输出预期结果
内容的提问来源于stack exchange,提问作者Brownie Mix
相关产品推荐
相关产品推荐

