【发布时间】:2014-01-04 09:25:26
【问题描述】:
我使用 python 描述符模拟了一些数据。
class Number:
def __init__(self):
self.num = 0
def __get__(self, instance, obj):
print("is getting number")
return self.number
def __set__(self, instance, value):
print("is setting number")
self.number = value
def __str__(self):
return str(self.number)
num = Number()
num = 2
print(num + 7)
输出:
9
好像成功调用了__get__和__set__方法,但是不知道为什么没有输出消息is getting number或者is setting number。
我不确定python是否调用了描述符方法。
我的问题是什么时候会调用描述符方法?
我总结一下我的起源猜测:
-
得到
- 当使用
obj.prop获取属性时,prop是另一个设置描述符的对象 - 在计算某些表达式时应该得到值,例如
a + 5。如果 a 有描述符并将调用__get__ - 如果对象模拟一个函数,会先调用
__get__获取函数体,再调用__call__运行函数。
- 当使用
-
设置
- 当对象出现在赋值语句左侧如
obj = 5
- 当对象出现在赋值语句左侧如
但我一定是错的,我需要有人告诉我正确的概念。
【问题讨论】:
标签: python descriptor