什么是描述符
官方的定义:描述符是一种具有“绑缚行动”的对象属性。接见(猎取、设置和删除)它的属性时,现实是挪用特别的要领(_get_(),_set_(),_delete_())。也就是说,假如一个对象定义了这三种要领的任何一种,它就是一个描述符。
描述符的作用是用来代办一个类的属性,须要注重的是描述符不能定义在被运用类的组织函数中,只能定义为类的属性,它只属于类的,不属于实例,我们能够经由过程检察实例和类的字典来确认这一点。
描述符是完成大部分Python类特征中最底层的数据结构的完成手腕,我们常运用的@classmethod、@staticmethd、@property、以至是__slots__等属性都是经由过程描述符来完成的。它是许多高等库和框架的主要东西之一,是运用到装潢器或许元类的大型框架中的一个非常主要组件。注:装潢器和元类等观点我们在今后文章中申明。
以下示例一个描述符及援用描述符类的代码:
class Descriptors: def __init__(self, key, value_type): self.key = key self.value_type = value_type def __get__(self, instance, owner): print("实行Descriptors的get") return instance.__dict__[self.key] def __set__(self, instance, value): print("实行Descriptors的set") if not isinstance(value, self.value_type): raise TypeError("参数%s必需为%s"%(self.key, self.value_type)) instance.__dict__[self.key] = value def __delete__(self, instance): print("实行Descriptors的delete") instance.__dict__.pop(self.key) class Person: name = Descriptors("name", str) age = Descriptors("age", int) def __init__(self, name, age): self.name = name self.age = age person = Person("xiaoming", 15) print(person.__dict__) person.name person.name = "jone" print(person.__dict__)
个中,Descriptors类就是一个描述符,Person是运用描述符的类。
类的__dict__属性是类的一个内置属性,类的静态函数、类函数、一般函数、全局变量以及一些内置的属性都是放在类__dict__里。
在输出描述符的变量时,会挪用描述符中的__get__要领,在设置描述符变量时,会挪用描述符中的__set__要领。
如上例子的运转效果以下:
以上就是python描述符有什么作用的细致内容,更多请关注ki4网别的相干文章!