は、私は次のように、インスタンスメソッドのためにデコレータを記述しようとしています:クラスメソッドと静的メソッドのpythonデコレータ?
from functools import wraps
def plus_decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
return 1 + f(*args, **kwargs)
return wrapper
@plus_decorator
def return_i(i):
return i
class A(object):
@plus_decorator
def return_i(self, i):
return i
@plus_decorator
@classmethod
def return_i_class(cls, i):
return i
@plus_decorator
@staticmethod
def return_i_static(i):
return i
if __name__ == '__main__':
print return_i(1)
a = A()
print a.return_i(1)
print A.return_i_class(1)
print A.return_i_static(1)
しかし、それがエラーをポップアップ:
AttributeError: 'classmethod' object has no attribute '__module__'
デコレータはclassmethod
上では動作しませんなぜ私が疑問に思っておよびstaticmethod
。私は、デコレータがほとんどすべてのパラメータをラッパーに渡し、結果を変更するだけだと思います。デコレータを変更してclassmethod
とstaticmethod
で動作させるにはどうしたらいいですか?
あなたのコールサイトはどのように見えますか? – Will
これは正常に動作します。あなたはそれを呼び出すために 'A()'のインスタンスを作成していません。 'a = A(); a.return_i(1) '。おそらく '@ classmethod'も必要でしょうか? – AChampion
私が会った元のエラーは、クラスメソッドのデコレータで、何とか私はインスタンスメソッドのcallsiteを使いこなしました。私は内容を変更させてください。 –