魔法方法——描述符(Property的原理)

读书笔记:

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 = 描述符。

练习:

这里写图片描述

这里写图片描述
这里写图片描述

这里写图片描述

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值