一、用作函数修饰符
作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。
创建函数修饰符的规则:
(1)修饰符是一个函数
(2)修饰符的参数是被修饰函数
(3)修饰符返回值取代被修饰函数
(4)装饰函数log在程序加载阶段就已经执行,即便没有相关调用
def log(func):
print('function log is called after loaded')
def wrapper():
print("log is begining")
func()
print("log end")
return wrapper
@log
def test():
print("test...")
def test1():
print("test1...")
if __name__=="__main__":
test()
print("------------------------------------------")
log(test1)()
被修饰函数带参数
def log(func):
def wrapper(*args,**kwargs):
print('...log begin...')
func(*args,**kwargs)
print('...log end...')
return wrapper
@log
def test1(arg1):
print('test1...',arg1)
return arg1
@log
def test2(arg1,arg2):
print('test2...',arg1,arg2)
return arg1+arg2
test1(a)
test2(a,bc)
修饰器带参数
def log(type):
def wrapper(func):
def decorater(*args, **kwargs):
func(*args, **kwargs)
print(type + '*'*10 + func.__name__)
return decorater
return wrapper
@log('Debug')
def func_a():
print('example')
if __name__ == '__main__':
func_a()
二、用作类方法及静态方法
Python Class类中有很多属性及方法,其中方法主要有三种:实例方法、类方法和静态方法。
#!/usr/bin/ env python
# -*- coding:utf-8 -*-
class Student(object):
#类属性
name = 'fdzwdt'
def __init__(self,name):
#实例对象属性
self.name = name
#实例方法,只能由实例对象来调用
def get_name_ins(self):
return self.name
#类方法,可以通过类来调用,也可以通过实例对象调用
@classmethod
def get_name_cls(cls):
return cls.name
#静态方法,可以通过类来调用,也可以通过实例对象调用
#主要功能就是对__init__构造函数进行重载
@staticmethod
def get_name_sta(name):
return Student(name).name
st = Student('weidt')
print('ins_name:'+st.get_name_ins())
print('cls_name:'+Student.get_name_cls())
print('sta_name:'+Student.get_name_sta('wdt'))