读书笔记:
Descriptor的意思 是描述符。
实现了—get–、 –set–和–delete–方法(至少1种)的类是描述符。
描述符的作用是,创建一个实例,作为另一个类的类属性。
__get__(self,instance,owner)用于访问属性,并返回值
__set__(self,instance,value)将在属性分配操作中调用,不返回值
__delete__(self,instance)控制删除操作,不返回任何值
>>> class MyDecriptor:
def __get__(self,instance,owner):
print("get: ",self,instance,owner)
def __set__(self,instance,value):
print("set: ",self,instance,value)
def __delete__(self,instance):
print("delete: ",self,instance)
>>> class Test:
#描述符类(定义了上面三种方法)作为Test类的属性
x = MyDecriptor()
>>> test = Test()
>>> test
<__main__.Test object at 0x0000000002F539B0>
>>> Test
<class '__main__.Test'>
>>> test.x
get: <__main__.MyDecriptor object at 0x0000000002F3EE80> <__main__.Test object at 0x0000000002F539B0> <class '__main__.Test'>
>>> test.x = "X-man"
set: <__main__.MyDecriptor object at 0x0000000002F3EE80> <__main__.Test object at 0x0000000002F539B0> X-man
>>> del test.x
delete: <__main__.MyDecriptor object at 0x0000000002F3EE80> <__main__.Test object at 0x0000000002F539B0>
Property的原理:
说明:图中双下划线del错误,正确的写法是双下划线delete!!!
这是一个“陷阱”,也是一个提醒:类的描述符必做定义在类的层次,不能定义为实例类的属性,如上self.x = 描述符。
练习: