aop传递str, class参数使用方式一样
aop将str, object传给调用函数使用方式一样
python2.7在wrapper层直接使用class可能会报错,只要在传递参数那一层处理, 然后在传给wrapper就可以
import functools
#aop传递str参数
#aop函数向使用该aop注解的函数传递str参数 如:gender, hobby
def general_param(name, age):
#str的参数在这可以随意的接收 如:name, age
print("name1: " + name+ "====" + "age1: " + age)
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
#str的参数在这可以随意的接收 如:name, age
print("name: "+ name+ "====" +"age: "+age)
#把gender, bobby参数传入func函数, 注意,func函数必须要有gender, hobby 参数来接收
kwargs["gender"] = "woman"
kwargs["hobby"] = "shopping"
return func(*args, **kwargs)
return wrapper
return decorator
#aop传递str参数, 不支持int, dict, list, tuple
@general_param("小明", "20")
#这里的gender和hobby参数是用来接收general_param切面方法传过来的
def pass_genera_param(gender=None, hobby=None):
print("gender: "+ gender+ "====" + "hobby: "+hobby)
print("hello world")
pass_genera_param()
class A :
def __init__(self):
print("i am A")
def callA(self):
print("A is called")
class B:
def __init__(self):
print("i am B")
def callB(self):
print("B is called")
#aop传递类参数
#aop函数向使用该aop注解的函数传递object参数 如:a, b
def class_param(klassa, klassb):
# class的参数在这可以随意的接收 如:klassa, klassb
a = klassa() # type: A
b = klassb() # type: B
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
# class的参数在这可以随意的接收 如:klassa, klassb
aa = klassa() # type: A
bb = klassb() # type: B
a.callA()
b.callB()
#把a, b对象传入func函数, 注意,func函数必须要有a, b参数来接收
kwargs["a"] = a
kwargs["b"] = b
return func(*args, **kwargs)
return wrapper
return decorator
#aop传递类参数A, B
@class_param(A, B)
#这里的a, b 用来接收class_param传递过来的对象
def pass_class_param(a=None, b=None):
print("pass class param")
a.callA()
b.callB()
pass_class_param()