はい。代わりに、インスタンスに渡すの実行時に、それを確認し、クラス定義時に属性:
def check_authorization(f):
def wrapper(*args):
print args[0].url
return f(*args)
return wrapper
class Client(object):
def __init__(self, url):
self.url = url
@check_authorization
def get(self):
print 'get'
>>> Client('http://www.google.com').get()
http://www.google.com
get
デコレータは、メソッドの引数をインターセプト。最初の引数はインスタンスなので、その属性を読み込みます。あなたはデコレータに文字列として属性名を渡すと、あなたは属性名をハードコーディングしたくない場合はgetattr
を使用することができます。
def check_authorization(attribute):
def _check_authorization(f):
def wrapper(self, *args):
print getattr(self, attribute)
return f(self, *args)
return wrapper
return _check_authorization
あなたがコントロールできるカスタムデコレータか、変更できないカスタムデコレータですか? –
これは私のデコレータですので、私はそれを完全に制御しています – Mark
initの前に呼び出されるのは問題だと思います... –