好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

如何理解Python的Descriptor?

有人可以解释一下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

查看更多关于如何理解Python的Descriptor?的详细内容...

  阅读:38次