• python的一些内置函数


    最近看到一些人写的文章里有提到python的描述符__get__,__set__,__del__. 这里我也小小研究了一下,除了这3个之外还加上过程中学习的几个,比如__call__等。

    __get__

    object.__get__(self, instance, owner)

     如果一个class定义了__get__,那么它就是一个descriptor。其中的参数instance是访问descriptor的实例,owner是所有者的类。如果不是通过实例而是通过类来访问

    那么instance就为None。

    比如下面的例子:

    class simpleDescriptor(object):
    
       def __get__(self,instance,owner):
           print "call __get__"
           return instance,owner
    
    class A(object):
        foo=simpleDescriptor()
    
    
    print A.foo  # None
    a=A()
    print a.foo  # <__main__.A object at 0x02A299F0>

     输出:

        call __get__
        (None, <class '__main__.A'>)
        call __get__
        (<__main__.A object at 0x02A698F0>, <class '__main__.A'>)

    descriptor自己的实例自己访问自己是不会触发__get__,而会触发__call__,只有descriptor作为其它类的属性才有意义。比如下面的代码:

    class simpleDescriptor(object):
    
       def __get__(self,instance,owner):
           print "call __get__"
           return instance
       def __call__(self,value):
            return value
    
    class A(object):
        foo=simpleDescriptor()
    
    
    s=simpleDescriptor()
    print s        #不会调用__get__
    print s(10)    # 10

     输出:

    <__main__.simpleDescriptor object at 0x02B49A30>
    10

    未完待续。。。。

  • 相关阅读:
    [转]创建节约内存的JavaBean
    TCP协议
    redis常用命令
    Windows&Linux常用命令笔记
    二叉树学习笔记
    云计算入门
    redis主从切换
    spring 异步处理request
    ibatis工作原理
    工作了3年的JAVA程序员应该具备什么技能?(转)
  • 原文地址:https://www.cnblogs.com/streakingBird/p/3939966.html
Copyright © 2020-2023  润新知