类型控件装饰器python方法

时间:2013-08-24 16:10:19

标签: python

我正在尝试一个函数的写入类型控件装饰器,它也适用于类内部的方法。 所以我必须考虑方法中出现的自我参数。 但我不知道如何检测这种情况。

以下是我的装饰者的代码:

def typedef_control(*args, **kwargs):
    """Decorator with parameters"""
    def decorator(func):
        """Decorator return changed function"""
        def func_changed(*args_, **kwargs_):
            if(len(args) != len(args_)):
                    raise IOError("Nombre d'argument de la fonction différent de celui du décorateur")    
            for i, arg_ in enumerate(args_):
                if args[i] is not type(arg_):
                    raise TypeError("Argument {0} n'est pas de type {1}".format(i, args[i]))
            for key in kwargs_:
                if key not in kwargs:
                    raise TypeError("Argument {0} sans type".format(repr(key)))
                if kwargs[key] is not type(kwargs_[key]):
                    raise TypeError("Argument {0} n'est pas de type {1}".format(repr(key), kwargs[key]))
            return func(*args_, **kwargs_)
        return func_changed
    return decorator

这是一个例子:

class MyClass:
@typedef_control(int)
def __init__(self, param_int)
    pass

正如预期的那样,它将在第一个if语句中输入if(len(args)!= len(args _))。

所以我必须在args_ [0]上添加一个条件。我想self是通过继承在 new 方法中创建的对象。 现在我不知道该怎么做。

如果您有任何想法,我会很高兴收到您的回复。

0 个答案:

没有答案