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

未完待续。。。。

原文地址:https://www.cnblogs.com/streakingBird/p/3939966.html