zoukankan      html  css  js  c++  java
  • property ,classmethod的来历-描述符

    我在想怎么让一个属性只读,这让我想起来了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__方法。

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

  • 相关阅读:
    Poj 2104 K-th Number(主席树&&整体二分)
    Bzoj 3262: 陌上花开(CDQ分治)
    Bzoj 2683: 简单题(CDQ分治)
    ZOJ2314 Reactor Cooling(无源汇上下界可行流)
    Cogs 12. 运输问题2(有上下界的有源汇最大流)
    Cogs 461. [网络流24题] 餐巾(费用流)
    Codevs 1227 方格取数 2(费用流)
    Cogs 13. 运输问题4(费用流)
    Poj 2195 Going Home(费用流)
    开学第二测
  • 原文地址:https://www.cnblogs.com/ilovewuzhaoxia/p/7284386.html
Copyright © 2011-2022 走看看