6 面向切面编程AOP和装饰器
#!/bin/env python3
# -*- coding: utf-8 -*-
# version: Python3.X
""" 练习一下自己怎么写一个装饰器
完整资料参考: https://taizilongxu.gitbooks.io/stackoverflow-about-python/content/3/README.html
"""
__author__ = '__L1n__w@tch'
def no_argument_decorator(function):
# 注意这是在脚本被解释期间(还没进入 main 代码就在跑的了)
print("I am a 无参数修饰器")
def wrapper():
print("{} 装饰开始 {}".format("*" * 30, "*" * 30))
function()
print("{} 装饰结束 {}".format("*" * 30, "*" * 30))
return wrapper
def decorator_maker_with_arguments(decorator_arg1, decorator_arg2):
print("创建装饰器, 同时接收参数: {}, {}".format(decorator_arg1, decorator_arg2))
def my_decorator(func):
print("装饰器, 得到参数: {}, {}".format(decorator_arg1, decorator_arg2))
# 不要忘了装饰器参数和函数参数!
def wrapped(*args, **kwargs):
print("装饰函数得到的参数: {}, {}, {}, {}".format(decorator_arg1, decorator_arg2,
args, kwargs))
return func(*args, **kwargs)
return wrapped
return my_decorator
@decorator_maker_with_arguments("a", "b")
# @no_argument_decorator
def no_argument_function():
print("I am a 普通的无参数函数")
@decorator_maker_with_arguments("a", "b")
# @no_argument_decorator
def argument_function(*args):
print("I am a 带多个参数的函数")
@decorator_maker_with_arguments("a", "b")
# @no_argument_decorator
def args_kwargs_function(*args, **kwargs):
print("I am a 带 args & kwargs 参数的函数")
if __name__ == "__main__":
no_argument_function()
argument_function("c", "d")
args_kwargs_function("c", "d")
Last updated
Was this helpful?