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

@修饰符

时间:2018-02-18 18:38:00      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:静态   style   python   int   size   **kw)   问题   type   实例   

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()

@修饰符

标签:静态   style   python   int   size   **kw)   问题   type   实例   

原文地址:https://www.cnblogs.com/ouyangping/p/8453003.html

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