私はを使用しています。PyCharm IDE以下はデコレータを使用しているコードの断片です。デコレータは、基本的に引数extract
が整数> = 0であるかどうかをチェックしています。 このコードは私が知る限りでは動作しますが、PyCharmでは構文エラーがあることに気付きました。Pycharmのクラススロー警告内のデコレータ
class MyClass(object):
def _argument_test_extract(func):
def _helper(*args, **kwargs):
kwargs = inspect.getcallargs(func, *args, **kwargs)
if 'rule' in kwargs:
extract = kwargs['rule']['extract']
if type(extract) == int and extract >= 0:
return func(**kwargs)
else:
raise Exception("Argument `extract` is not an integer")
return _helper
@_argument_test_extract
def _perform_split_model_string(self, rule):
# do some stuff
PyCharm私は@_argument_test_extract
と機能を飾るラインの次のメッセージを示す:
関数 '_argument_test_extract' が位置引数
ライン欠いデコレータ関数が定義されていますdef _argument_test_extract(func):
は次のメッセージを示します
通常の関数の最初のパラメータは最後の行
return func(**kwargs)
次のメッセージを示す '自己'
です:
は 'MyClassの'
呼び出すことはできません
明らかに、_argument_test_extract
を@staticmethod
に飾ると、PyCharmの警告はすべて消えますが、このエラーのためにコードはもう機能しません。TypeError: 'staticmethod' object is not callable
。
私の構文に何か問題がありますか?おかげ
デコレータがクラス内にあるのはなぜですか?標準機能として外部に移動するだけです。 – jonrsharpe