2009-01-26 17 views
44

मुझे @staticmethod, @classmethod, और @property के बारे में पता है, लेकिन केवल बिखरे हुए दस्तावेज़ों के माध्यम से। क्या पाइथन में निर्मित फ़ंक्शन सजावट की एक पूरी सूची है?पायथन - कहीं सजावट की एक सूची है?

+0

कोई आधिकारिक सूची नहीं है, लेकिन यह लिंक उपयोगी है: https://github.com/lord63/awesome-python-decorator – Casebash

उत्तर

28

मैं ऐसा नहीं सोचता। सजावटी सामान्य कार्यों से अलग नहीं होते हैं, आप केवल उन्हें एक प्रशंसक तरीके से बुलाते हैं।

उन सभी को खोजने के लिए खोज Built-in functions सूची की कोशिश, जैसा कि आप Python glossary में देख सकते हैं क्योंकि डेकोरेटर वाक्य रचना, बस एक वाक्यात्मक चीनी के रूप में निम्नलिखित दो परिभाषा बराबर कार्य (शब्दकोष से इस उदाहरण की नकल की) बनाने के लिए:

def f(...): 
    ... 
f = staticmethod(f) 

@staticmethod 
def f(...): 

तो कोई भी अंतर्निहित फ़ंक्शन जो किसी अन्य फ़ंक्शन को लौटाता है उसे सजावटी के रूप में उपयोग किया जा सकता है। प्रश्न यह है - क्या इसका उपयोग इस तरह से करने के लिए समझ में आता है? :-)

functools मॉड्यूल कुछ कार्यों कि सज्जाकार के रूप में इस्तेमाल किया जा सकता है, लेकिन वे बनाया-इन नहीं कर रहे हैं आप के लिए कहा।

12

उनमें अंतर्निहित नहीं कर रहे हैं, लेकिन उदाहरण सज्जाकार की this library बहुत अच्छा है।

एबगन says के रूप में, अंतर्निहित फ़ंक्शन सूची शायद देखने के लिए सबसे अच्छी जगह है, हालांकि सजावटी को कक्षाओं के रूप में भी कार्यान्वित किया जा सकता है, यह व्यापक होने की गारंटी नहीं है।

-2

सभी सज्जाकार की एक सूची के रूप में ऐसी कोई चीज नहीं है। सभी कार्यों की कोई सूची नहीं है। सभी वर्गों की कोई सूची नहीं है।

डेकोरेटर काम करता है, तरीकों, या वर्गों में एक आम पहलू को परिभाषित करने के लिए एक उपयोगी उपकरण है। अंतर्निहित सजावटी हैं। इसके अलावा वहां कई अच्छे और बेकार सजावटी भी हैं। इसी तरह कूल और बेकार वर्गों की संख्या भी है।

1

डेकोरेटर यहाँ तक कि एक समारोह वापस जाने के लिए आवश्यक नहीं हैं। मैंने पहले @atexit.register का उपयोग किया है।

+0

ठीक है, वह उस उद्देश्य के लिए उसी कार्य को पारित करता है। –

+0

ओह, क्या यह है? मैंने कभी नहीं देखा। – habnabit

+1

"सजावट करने वालों को एक समारोह वापस करने की भी आवश्यकता नहीं है" - किसी भी अर्थ को बनाने के लिए, हालांकि, उन्हें चाहिए, क्योंकि '@ सजावट' केवल 'एफ = सजावट (एफ)' के लिए चीनी है - अन्यथा आप संदर्भ खो देंगे जिस समारोह में आप सजा रहे हैं। –

संबंधित मुद्दे