হ্যাঁ. ক্লাস সংজ্ঞা সময়ে ইভেন্ট অ্যাট্রিবিউটটি পাস করার পরিবর্তে এটি রানটাইমে পরীক্ষা করে দেখুন:
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