python有哪些作用-python描述符有什么作用

python描述符的作用:代理一个类的属性,让程序员在引用一个对象属性时自定义要完成的工作;它是实现大部分Python类特性中最底层的数据结构的实现手段,是使用到装饰器或者元类的大型框架中的一个非常重要组件。

5ce5fbf004369623.jpg

本文主要介绍描述符的定义,个人的一些理解。希望看完这篇文章后,你对描述符有了更清晰的认识。

什么是描述符

官方的定义:描述符是一种具有“捆绑行为”的对象属性。访问(获取、设置和删除)它的属性时,实际是调用特殊的方法(_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__方法。

如上例子的运行结果如下:

1558575942401713.jpg

以上就是python描述符有什么作用的详细内容,更多请关注php中文网其它相关文章!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值