Python046--魔法方法:描述符

Posted frankruby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python046--魔法方法:描述符相关的知识,希望对你有一定的参考价值。

一、描述符的定义:

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

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--魔法方法:描述符的主要内容,如果未能解决你的问题,请参考以下文章

Python3 魔法方法:描述符(property的实现原理)

实战丨Python黑魔法之描述符

Python基础——魔法方法

Python基础——魔法方法

Python魔法方法(17):__delete __(self, instance) 方法

Python魔法方法(17):__delete __(self, instance) 方法