मैं एक सजावट बनाना चाहता हूं जिसे पैरामीटर के साथ या उसके बिना इस्तेमाल किया जा सकता है: ऐसा कुछ:वैकल्पिक पैरामीटर के साथ एक सजावट कैसे बनाया जाए?
class d(object):
def __init__(self,msg='my default message'):
self.msg = msg
def __call__(self,fn):
def newfn():
print self.msg
return fn()
return newfn
@d('This is working')
def hello():
print 'hello world !'
@d
def too_bad():
print 'does not work'
मेरे कोड में, केवल पैरामीटर के साथ सजावटी का उपयोग काम कर रहा है: दोनों को कैसे आगे बढ़ना है काम कर रहा है (पैरामीटर के साथ और बिना)?
मुझे लगता है कि यह आपके मामले के लिए काम करता है और इसी तरह के मामलों के लिए होगा। लेकिन क्या होगा अगर सजावटी का तर्क वास्तव में एक कॉल करने योग्य है? सजाए गए कार्य और तर्क के बीच आप कैसे अंतर करेंगे? – ksrini
@ksrini: इग्नासिओ ने अपने [उत्तर] (http://stackoverflow.com/a/3931654/355230) साल पहले बताया था। – martineau
आप कीवर्ड तर्कों (जैसे '@trace (default = ...) 'का उपयोग कर इसके आसपास भी जा सकते हैं। – jtbandes