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
在我的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