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