@修饰符

def funA(a):
    print 'funA'

def funB(b):
    print 'funB'

@funA
@funB
def funC():
    print 'funC'

result:

>>> ================================ RESTART ================================
>>>
funB
funA

可以这样思考,return funA(funB(funC))
实例:

def now()
    print '2016-05-11'

now()

如果我想在now执行前执行另外一个方法,而不修改now方法呢?那么就用到了装饰器

def log(func):
    # func 参数传递的值就是 now方法  
    def wrap(*args, **kw):

        # *args, **kw 方法接收任何形式的参数

        print '2016-05-10'
        return func(*args, **kw)  # 执行now方法
    return wrap


@log
def now():
    print '2016-05-11'


now()  # 相当于执行 now = log(now),可以看到 func 就是 now的值,用装饰方法覆盖now

问题来了,我想传递参数呢?

def log(text):
    def decorator(func):
        def wrap(*args, **kw):
            print text
            return func(*args, **kw)
        return wrap
    return decorator


@log('2016-05-10')
def now():
    print '2016-05-11'


now()  # 相当于执行 now = log('2016-05-10')(now)

1.  @prototype修饰符的用法

class Person(object):

    def __init__(self):
        
        self.__x = None
        
    def setx(self, value):
    
        self.__x = value
        
     def getx(self):
     
         return self.__x
         
     def delx(self):
     
         del self.__x
         
     x = property(getx, setx, delx)

p = Person()

p.x = 123  # 自动调用 setx 方法
print p.x  # 自动调用 getx 方法

del p.x    # 自动调用 delx 方法

另外一种用法:

class Person(object):

    def __init__(self):
        
        self.__x = None
        
    @prototype    
    def x(self):
        return self.__x
    
    @x.setter
    def x(self, value):
        self.__x = value
    
    @x.deleter
    def x(self):
        del self.__x
        
p = Person()

p.x = 123  # 自动调用 setx 方法
print p.x  # 自动调用 getx 方法

del p.x    # 自动调用 delx 方法

2. staticmethod修饰符

被staticmethod修饰符的表示这是一个类的静态方法,可以被类直接调用

class Person(object):
    
    @staticmethod
    
    def hello():
        print 'hello world!!!'
if __name__ == '__main__':
    Pserson.hello()
posted @ 2018-02-18 18:30  欧阳平  阅读(292)  评论(0编辑  收藏  举报