classmethod
次のようにデコレータを使用したいコードがあります。
import functools
def mydeco(function):
@classmethod
def wrapper(cls):
return function(cls)
return functools.update_wrapper(wrapper, function)
# return wrapper
class BaseClass(object):
@classmethod
@mydeco
def foo(cls):
return "42"
print BaseClass.foo()
行をコメントアウトすると@mydeco
、コードが機能します。つまり、テキスト42
が出力されます。このデコレータを含めると、いくつかの問題があります。
より単純な行
return wrapper
を使用すると、エラーが発生しますTypeError: 'classmethod' object is not callable
それを正しく行う方法、つまり、指定された例では、元の関数が変更されずに返されます。
より複雑な呼び出し
return functools.update_wrapper(wrapper, function)
を使用して元の関数の一部を保持すると、エラーが発生しますAttributeError: 'classmethod' object has no attribute '__module__'
このエラーが最初の問題に関連しているかどうかはわかりませんが、別の問題に見えます。これらの問題を解決するための具体的な提案は大歓迎です。
上記の例は実際に何かを「行う」わけではなく、私が抱えている問題を示すための可能な限り最小の例にすぎません。