码迷,mamicode.com
首页 > 其他好文 > 详细

property ,classmethod的来历-描述符

时间:2017-08-04 16:14:16      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:==   list   assm   实现   eth   --   lis   查找   obj   

我在想怎么让一个属性只读,这让我想起来了classmethod,都知道classmethod就是只能让类来调用,所以呢,这里它们都用到一个东西描述符。

1描述符有两种:

1)数据描述符,实现了__get__和__set__的类。

2)非数据描述符,只实现了__get__的类。

2,实例查找属性的顺序链,ex,obj = EX(),在访问obj.attr的时候,

1)如果attr存在是数据描述符且存在于EX或者其父类中,则直接返回。

2)如果attr存在是属性且存在于obj或者其父类中,则直接返回。

3) 如果attr存在是非数据描述符且存在于EX或者其父类中,则直接返回。

4)如果attr存在是属性且存在于EX或者其父类中,则直接返回。

5)如果attr在__attr__中,则直接返回。

6)抛出属性错误异常。

3,实际例子。

class myclassmethod(object):

       def __init__(self, fun):

              self.fun = fun

       def __get__(self, obj, type):

    

    def _excute(*args, **kwargs):
...       new_args = list(args).insert(0, type)
       result = self.fun(*new_args, **kwargs)
...       return result

             if obj  == None:

      returun self._excute

             else:

                 print ‘instance is not call----‘

这样就完成了一个classmethod,同理,property,当然只读方法或者属性可以重写__set__方法。

好了,描述符就先记到这里。

property ,classmethod的来历-描述符

标签:==   list   assm   实现   eth   --   lis   查找   obj   

原文地址:http://www.cnblogs.com/ilovewuzhaoxia/p/7284386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!