Python 装饰器我的功能检查

Python decorator my function check

在我的class中我写了这个方法:

def ts_prep(self, test_id):
    ltouple = ()
    tab_lib = temp_library.objects.filter(main_id=test_id)
    l1 = ["Settings", ""]
    ltouple += (l1,)
    if tab_lib.count() == 0: ltouple = (l1, ["", ""])
    l = []
    for r in tab_lib.iterator():
        l.append(str(r.l_type))
        l.append(str(r.l_val))
        ltouple += (l,)
        l = []

    tslist = [x for x in ltouple]
    return tslist

我如何为我的方法创建一个装饰器来执行 if tab_lib 检查以在所有进行相同检查的方法中添加它?

我试试

def p_decorate(func):
    def func_wrapper(test_id):
       tab_lib = temp_library.objects.filter(main_id=test_id)
        l1 = ["Settings", ""]
        ltouple += (l1,)
        if tab_lib.count() == 0: ltouple = (l1, ["", ""])
        return ltouple
   return func_wrapper

但是好像不行

提前致谢

首先,您的代码总体上可以简化很多。这应该是等价的:

def ts_prep(self, test_id):
    tab_lib = temp_library.objects.filter(main_id=test_id)
    tslist = [["Settings", ""]]
    if tab_lib.count() == 0:
        tslist.append(["", ""])
    for r in tab_lib.iterator():
        tslist.append([str(r.l_type), str(r.l_val)])

    return tslist

要回答您的问题,您可以这样做:

import functools

def decorator(func):
    @functools.wraps(func)
    def wrapper(test_id):
        tab_lib = temp_library.objects.filter(main_id=test_id)
        tslist = [["Settings", ""]]
        if tab_lib.count() == 0:
            tslist.append(["", ""])
        return func(tab_lib, tslist)

    return wrapper

@decorator
def ts_prep(self, tab_lib, tslist):
    for r in tab_lib.iterator():
        tslist.append([str(r.l_type), str(r.l_val)])

    return tslist