私はいくつかのメソッドを持ついくつかのメソッドを持っています。このチェックに応じて、メソッドのコードが実行される、またはexecption育てられるだろう。私はデコレータを使っているが、すべてのメソッドの最初に "check"コードを複製するのではなく、デコレータが密接に関連しているので、クラス自体の中にデコレータを埋め込んでほしい。だから、基本的には:?代わりにこの基底クラスと派生クラスの両方の基底クラスのデコレータの使用
class A(object):
def a_method(self):
if self.check_var is True:
(some_code)
else:
raise Exception
の
私はこの
class A(object):
def decorator(function):
def function_wrapper(self, *args, **kwargs):
if self.check_var is True:
return function(self, *args, **kwargs)
else:
raise Exception
return function_wrapper
@decorator
def a_method(self):
(some_code)
私の最初の質問は、私がこの権利についてつもりされて持っていると思いますかまたはより良い方法があります。私はこのチェックを必要とするAクラスの多くのメソッドを持っているので、コードを不必要に複製したくないのです。
2番目の質問は、私がこのように説明した場合、クラスAからクラスを派生させて同じデコレータチェックを実行するときに問題に遭遇します。繰り返しますが、コードを複製したくないので、派生クラスのチェックを行うためにデコレータをベースクラスAに再利用したいと思います。私はデコレータを@classmethod
にすることについて読んでいましたが、これを行うとデコレータを派生クラスで使用できますが、基本クラスでは使用できなくなりました。
だから、基本的に私はこのような何か希望:
class A(object):
@classmethod #maybe
def decorator(function):
def function_wrapper(self, *args, **kwargs):
if self.check_var is True:
return function(self, *args, **kwargs)
else:
raise Exception
return function_wrapper
@decorator
def a_method(self):
(some_code)
class B(A):
@decorator
def b_method(self):
(some_code)
はこれを行うための任意のきれいな方法で誰を知っていますか?
'decorator()'を両方のクラスの外側とその前に定義するだけです。 – martineau
私はクラス内にデコレータを持っていたいと思います...デコレータがしていることは、クラスに非常に関連しています – viterbi
デコレータを使ってファイル(モジュール)に基本クラスを置くと、それらが一緒に属していることがかなり明らかです@martineauが言ったこと – user3012759