python描述符有什么作用


本文摘自php中文网,作者(*-*)浩,侵删。

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

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

什么是描述符

官方的定义:描述符是一种具有“捆绑行为”的对象属性。访问(获取、设置和删除)它的属性时,实际是调用特殊的方法(_get_(),_set_(),_delete_())。也就是说,如果一个对象定义了这三种方法的任何一种,它就是一个描述符。

描述符的作用是用来代理一个类的属性,需要注意的是描述符不能定义在被使用类的构造函数中,只能定义为类的属性,它只属于类的,不属于实例,我们可以通过查看实例和类的字典来确认这一点。

描述符是实现大部分Python类特性中最底层的数据结构的实现手段,我们常使用的@classmethod、@staticmethd、@property、甚至是__slots__等属性都是通过描述符来实现的。它是很多高级库和框架的重要工具之一,是使用到装饰器或者元类的大型框架中的一个非常重要组件。注:装饰器和元类等概念我们在以后文章中说明。

如下示例一个描述符及引用描述符类的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

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-p.jpg

以上就是python描述符有什么作用的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python需要编程基础吗

阶乘Python怎么打

Python抽象类有什么用

如何用Python代码温度转换?

Python属于什么型语言

Python pip是什么原理

Python + wordcloud + jieba 十分钟学会生成中文词云

Python画正方形的代码是什么?

Python代码和注释分离的方法_Python

Python爬虫对dota排行榜爬取的实例

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...