python中属性描述符的详细介绍(代码示例)


本文摘自php中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于python中属性描述符的详细介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

作为一个小白,每天都在不断地看东西,学知识,今天给大家介绍一个好东西——属性描述符

什么是属性描述符呢?

其实在一个类中实现set__、__get__、__delete中任意一个魔法函数就是一个属性描述符。

接下来我们定义一个属性描述符:

1

2

3

4

5

6

7

8

9

class IntegerField:

    def __get__(self, instance, owner):

        pass

    def __set__(self, instance, value):

        pass

    def __delete__(self, instance):

        pass

class User:

    high= IntField()

__get__:当我们用类或者实例来调用该属性时,会返回__get__函数的结果。
__set__:当我们用实例来设置属性值时,Python会调用该函数。对类没有限制作用。
__delete__:当我们用实例试图删除该属性时,Python会调用该函数。对类没有限制作用。
到底这个东西怎么用呢?接下来为大家修改上面的代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

class IntegerField:

    def __get__(self, instance, owner):

        return self.value

    def __set__(self, instance, value):

        if not isinstance(value,numbers.Integral):

            raise ValueError("请输入一个整数")

        self.value=value

         

    def __delete__(self, instance):

        pass

class User:

    high=IntegerField()

#验证代码

if __name__ == '__main__':

    user=User()

    user.high='175'    #报错,ValueError:请输入一个整数

    User.high=175    #正确执行,不报错

这样我们就能够运用属性描述符来给属性附上一定的逻辑了。
其实在属性描述符下还分为
1、数据描述符:实现了__set__、__get__

1

2

3

4

5

6

if __name__ == '__main__':

    user=User()

    user.high=175

    print(user.__dict__)    #high是不放入__dict__中的,优先查找数据描述符中的值

    user.__dict__["high"]="abc"    #这样赋值时可以的,并且可以放入__dict__中

    print(user.high)    #会报错,因为在调用__get__方法时并没有value属性

2、非数据:实现__get__不实现__set__

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

class NonField:

    def __init__(self, high=170):

        self.value = high

 

    def __get__(self, instance, owner):

        return self.value

 

 

class User:

    high = NonField()

 

 

if __name__ == '__main__':

    user = User()

    user.high = '175'    #会放入user.__dict__中

    print(user.__dict__)

以上就是python中属性描述符的详细介绍(代码示例)的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python怎么才算入门

认识Python对象自省机制

Python 在字符串中加入变量的实例讲解

Python安装包里idle在哪

Python数据可视化利器matplotlib详解

Python怎么把列表转换为集合

pandas妙招之 在dataframe中通过索引高效获取数据

json在Python中的使用介绍

Python针对任意多的分隔符拆分字符串(附代码)

Python用openpyxl读写excel的实例教程

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




打赏

取消

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

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

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

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

评论

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