2

クラス内のメソッドでも機能する関数の型制御デコレータを書き込もうとしています。そのため、メソッドに現れる self パラメータを考慮する必要があります。しかし、このケースを検出する方法がわかりません。

これが私のデコレータのコードです:

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メソッドで作成されたオブジェクトだと思います。今、私はそれをどうするかわかりません。

ご意見がございましたら、お聞かせいただければ幸いです。

4

0 に答える 0