Python aop passes str, class parameter aop passes str, object to the calling function

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

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325122899&siteId=291194637