如何理解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

Posted in 未分类

发表评论