我正在尝试制作一个将所有myt参数转换为列表的装饰器。 所以我现在的代码是:
来自functools import wrap的
def aslist(func):
def iflist(a):
if type(a) is not list:
return [a]
else:
return a
@wraps(func)
def wrapper(*args, **kwds):
args = map(iflist, args)
return func(*args, **kwds )
return wrapper
使用whit功能时效果很好:
@aslist
def functest(a,b,c):
print(a, b, c)
functest(1,2,[3])
但是当我尝试在类方法中使用它时,它还会将 self 转换为列表:
class ClassTest:
@aslist
def __init__(self,a,b):
self.A = a
self.B = b
除非我让装饰器跳过第一个参数,否则和 T = ClassTest(1,2)会失败。
有没有办法让单个装饰器兼顾功能和方法?