• 技术文章 >后端开发 >Python教程

    如何理解 Python 的 Descriptor?

    2016-06-06 16:23:31原创622
    有人可以解释一下python的Descriptor知识吗?

    回复内容:

    旧文搬运:

    >>> class MyInt(int): 
    ...     def square(self): 
    ...             return self*self 
    ...      
    >>> n = MyInt(2) 
    >>> n.name = 'two' 
    >>> n.square() 
    4 
    >>> n.name 
    'two' 
    

    简单来讲,描述符就是一个Python对象,但这个对象比较特殊,特殊性在于其属性的访问方式不再像普通对象那样访问,它通过一种叫描述符协议的方法来访问。这些方法包括__get__、__set__、__delete__。定义了其中任意一个方法的对象都叫描述符。举个例子:


    普通对象

    class Parent(object):
        name = 'p'
    
    class Person(Parent):
        name = "zs"
    
    zhangsan = Person()
    zhangsan.name = "zhangsan"
    print zhangsan.name
    #>> zhangsan
    
    以为是Python3.4里新加的什么牛逼功能,还和单继承联系起来了。吓得我赶紧翻了一下文档。

    Descriptor就是一类实现了__get__(), __set__(), __delete__()方法的对象。没了。就这样了。没看懂的话去学习一下duck typing。

    用途就很多了。把函数包装成property,把property包装成private property等等。 图片python装饰器语法,foo函数被装饰后,不再是原函数,
    @logger是foo=logger(foo) 的语法糖,
    foo是logger(foo)的返回值inner,inner是一个函数,foo(5)
    等于inner(5).inner函数的形式参数是可变长度参数*args,**kwargs,
    随便你传元组形式或字典形式的数据都可以。

    两篇拙文,入门级水平

    简明Python魔法-1
    简明Python魔法-2
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Descriptor python
    上一篇:目前市面上最流行的Python IDE是哪一款?有什么优点? 下一篇:IDLE如何清屏?
    Web大前端开发直播班

    相关文章推荐

    • python基础语法详解之函数• 详细讲解Python之Seaborn(数据可视化)• Python详细解析之多线程爬虫与常见搜索算法• 完全掌握Python数学相关模块• 完全掌握Python常用技巧之ip代理

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网