您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

python描述符有什么作用

2024/4/7 3:52:08发布18次查看
python描述符的作用:代理一个类的属性,让程序员在引用一个对象属性时自定义要完成的工作;它是实现大部分python类特性中最底层的数据结构的实现手段,是使用到装饰器或者元类的大型框架中的一个非常重要组件。
本文主要介绍描述符的定义,个人的一些理解。希望看完这篇文章后,你对描述符有了更清晰的认识。
什么是描述符
官方的定义:描述符是一种具有“捆绑行为”的对象属性。访问(获取、设置和删除)它的属性时,实际是调用特殊的方法(_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.nameperson.name = joneprint(person.__dict__)
其中,descriptors类就是一个描述符,person是使用描述符的类。
类的__dict__属性是类的一个内置属性,类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里。
在输出描述符的变量时,会调用描述符中的__get__方法,在设置描述符变量时,会调用描述符中的__set__方法。
如上例子的运行结果如下:
以上就是python描述符有什么作用的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product