通過裝飾模式來包裹被裝飾的函數可以用類@decorate_class,也可以用函數@decorate_function

def decorate_function(original_function):
    def wrapper_function(*args,**kwargs):
        print('original_function name is {}'.format(original_function.__name__))
        return original_function(*args,**kwargs)
    return wrapper_function
class decorate_class(object):
    def __init__(self,original_function):
        self.original_function = original_function
    def __call__(self, *args, **kwargs):
        print('original_function name is {}'.format(self.original_function.__name__))
        return self.original_function(*args, **kwargs)

# @decorate_function
@decorate_class
def display():
    print('original_function ran')
# @decorate_function
@decorate_class
def display_info(name,age):
    print('display的參數爲({},{})'.format(name,age))
# 未用註解時
# function1 = decorate_function(original_function)
# function1()
# display_info('lisi',25)
display()

通過裝飾模式來包裹被裝飾的函數,在這個函數開始或結束,運行裝飾函數。可以起到增強函數或者說方法的作用,java的動態代理異曲同工。

發佈了8 篇原創文章 · 獲贊 1 · 訪問量 1861
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章