为何类调用计算属性返回property对象,实例调用返回预期对象?
问题解析
示例代码
class a_class(): _x = [] @property def x(self): return a_class._x ac1 = a_class() print(a_class.x) print(ac1.x)
差异原因
这是因为@property装饰器本质是创建了一个property对象,它的行为会根据访问主体不同而变化:
- 直接通过类(
a_class.x)访问时,拿到的就是这个property对象本身——property是绑定在类上的属性,但只有通过实例访问时,它的特殊逻辑才会触发。 - 通过实例(
ac1.x)访问时,Python会自动调用property的__get__方法,也就是你用@property装饰的那个x方法,最终返回a_class._x对应的列表对象。
简单来说:类访问拿到的是property对象本身,实例访问会触发property的取值逻辑,执行对应方法返回实际结果。
内容的提问来源于stack exchange,提问作者Joshua Merrifield
相关产品推荐
相关产品推荐

