装饰器在init中强制转换对象的实例

时间:2017-09-20 18:48:07

标签: python-3.x python-decorators class-method

我正在尝试制作一个将所有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)会失败。

有没有办法让单个装饰器兼顾功能和方法?

0 个答案:

没有答案