码迷,mamicode.com
首页 > 编程语言 > 详细

【Python046--魔法方法:描述符】

时间:2018-11-13 13:06:29      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:object   test   结果   delete   实例   返回   打印   style   控制   

一、描述符的定义:

描述符就是将特殊类型的类的实例指派给另外一个类的属性

1、举例:

特殊类型的类要实现以下三个方法中的其中一个或者全部实现

* __get__(self,instance,owner)

 --用于访问属性,它返回属性的值

* __set__(self,instance,value)

  --用于设置属性,不返回任何内容

* __delete__(self,instance)

  --控制删除操作,不返回任何内容

class MyDecriptor:
    def __get__(self,instance,owner):
        #打印查看描述符的get,set,delete方法中各个参数的含义
        print("getting...",self,instance,owner)

    def __set__(self,instance,value):
        print("setting...",self,instance,value)

    def __delete__(self,instance):
        print("deleteing...",self,instance)

class Test:
    #把特殊类MyDecriptor的实例指派给Test类的x属性
    x = MyDecriptor()

执行结果:
>>> test = Test()
>>> test.x
getting... <__main__.MyDecriptor object at 0x10a2186d8> <__main__.Test object at 0x10a208f60> <class __main__.Test>
>>> test
<__main__.Test object at 0x10a208f60>
>>> Test
<class __main__.Test>

‘‘‘
|--由打印出来的getting...,可以看出来,参数self是MyDecriptor的对象(<__main__.MyDecriptor object at 0x10a2186d8>)
|--参数instance是Test的对象(<__main__.Test object at 0x10a208f60>)
|--参数owner是Test的本类自己(<class ‘__main__.Test‘>)
|--具体可由对象test打印出来的内容,和Test类打印出来的内容得到验证
|--set和delete同理
‘‘‘
>>> test.x = "X-man"
setting... <__main__.MyDecriptor object at 0x10a2186d8> <__main__.Test object at 0x10a208f60> X-man
>>> del test.x
deleteing... <__main__.MyDecriptor object at 0x10a2186d8> <__main__.Test object at 0x10a208f60>
>>> 

2、二次举例:实现property

【Python046--魔法方法:描述符】

标签:object   test   结果   delete   实例   返回   打印   style   控制   

原文地址:https://www.cnblogs.com/frankruby/p/9951484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!