Python–描述符
1.描述符
什么是描述符?
如果一个类实现了 get()、set()和__delete__()中的其中任意一种方法的新式类,用这个类创建的实例对象称之为“描述符对象”,用上述类创建的对象,用来当做另外一个类的类属性的值,我们把这个类属性称之为“描述符”。
class Mytest(object):
def __get__(self, instance, owner):
print("__get__被调用")
return "get"
def __set__(self, instance, value):
print("__set__被调用")
def __delete__(self, instance):
print("__delete__被调用")
class ThemTest(object):
test = Mytest()
them = ThemTest()
them.test # 调用 __get__
them.test = 'python' # 调用 __set__
del them.test # 调用__delete__
运行效果:
描述符的作用
当访问一个属性时,我们可以不直接给一个值,而是接一个描述器,让访问和修改设置时自动调用__get__方法和__set__方法。再__get__方法和__set__方法中进行某种处理,就可以实现更改操作属性行为的目的。这就是描述符的作用。
为什么要用描述符
因为python是一个动态类型解释性语言,不像C/C++等静态变异型语言,数据类型在编译时便可以进行验证,而python中必须添加额外的类型检查逻辑代码才能做到这一点,这就是描述符的初衷。