मैं एक पायथन 2.7 मॉड्यूल के रूप में एक बहुत ही बुनियादी मंच का निर्माण कर रहा हूं। इस मॉड्यूल में एक रीड-इवल-प्रिंट लूप है जहां दर्ज उपयोगकर्ता कमांड फ़ंक्शन कॉल पर मैप किए जाते हैं। चूंकि मैं अपने प्लेटफॉर्म के लिए प्लगइन मॉड्यूल बनाने में आसान बनाने की कोशिश कर रहा हूं, इसलिए फ़ंक्शन कॉल मेरे मुख्य मॉड्यूल से मनमाने ढंग से प्लगइन मॉड्यूल तक होगी। मैं एक प्लगइन बिल्डर को कमांड निर्दिष्ट करने में सक्षम होना चाहता हूं कि वह अपने फ़ंक्शन को ट्रिगर करना चाहता है, इसलिए मैं मुख्य मॉड्यूल में कमांड-> फ़ंक्शन dict में दूरस्थ रूप से मैपिंग दर्ज करने के लिए एक पाइथोनिक तरीका ढूंढ रहा हूं। प्लगइन मॉड्यूल।संकलन समय पर फ़ंक्शन मेटाडेटा प्रदान करने के लिए अधिकांश पायथनिक तरीका?
मैं कई चीजें देखा है:
विधि नाम की पार्सिंग: मुख्य मॉड्यूल प्लगइन मॉड्यूल आयात और विधि के नाम कि एक निश्चित प्रारूप से मिलान के लिए इसे स्कैन होगा। उदाहरण के लिए, यह डाउनलोड_फाइल_command (फ़ाइल) विधि को निर्देश में "डाउनलोड फ़ाइल" -> download_file_command के रूप में जोड़ सकता है। हालांकि, संक्षिप्त, आसान-टाइप-प्रकार कमांड नाम (कहें, "डीएल") प्राप्त करने की आवश्यकता है कि फ़ंक्शन का नाम भी छोटा हो, जो कोड पठनीयता के लिए अच्छा नहीं है। यह प्लगइन डेवलपर को सटीक नामकरण प्रारूप के अनुरूप होने की भी आवश्यकता है।
पार मॉड्यूल सज्जाकार: सज्जाकार दिया जाएगा प्लगइन डेवलपर उसकी समारोह जो कुछ भी वह चाहता है नाम और बस @ Main.register ("डेली") की तरह कुछ जोड़ सकते हैं, लेकिन वे आवश्यक रूप से है कि मैं दोनों की आवश्यकता होगी अन्य मॉड्यूल के नामस्थान को संशोधित करें और मुख्य मॉड्यूल में वैश्विक स्थिति रखें। मैं समझता हूं कि यह बहुत बुरा है।
एक ही मॉड्यूल सज्जाकार: उपर दिए गए तर्क का उपयोग कर, मैं एक डेकोरेटर कुछ आदेश नाम-> समारोह मानचित्रण प्लगइन मॉड्यूल के लिए स्थानीय करने के लिए समारोह का नाम कहते हैं कि जोड़ सकते हैं और करने के लिए मानचित्रण पुनः प्राप्त कर सकता है एपीआई कॉल के साथ मुख्य मॉड्यूल। इसके लिए आवश्यक है कि कुछ विधियां हमेशा मौजूद हों या विरासत में हों, और - अगर सजावट की मेरी समझ सही है - फ़ंक्शन केवल स्वयं ही पहली बार पंजीकृत हो जाएगा और इसके बाद अनावश्यक रूप से प्रत्येक बाद के समय को फिर से पंजीकृत कर देगा।
इस प्रकार, क्या मैं वास्तव में जरूरत है आदेश नाम है कि यह ट्रिगर करना चाहिए के साथ एक समारोह टिप्पणी करने के लिए एक pythonic तरीका है, और इस तरह से समारोह का नाम नहीं हो सकता। जब मैं मॉड्यूल आयात करता हूं तो मुझे कमांड नाम-> फ़ंक्शन मैपिंग निकालने में सक्षम होना चाहिए, और प्लगइन डेवलपर की ओर से कोई भी कम काम एक बड़ा प्लस है।
सहायता के लिए धन्यवाद, और मेरी पाइथन समझ में कोई दोष होने पर माफी माँगती है; मैं भाषा के लिए अपेक्षाकृत नया हूँ।
- डिस्कवर प्लगइन्स
- उत्प्रेरक एक प्लगइन
अपने प्रश्न का पता ही दूसरे भाग में प्रस्तावित समाधान में कुछ कोड निष्पादन:
बस आपको यह एहसास जाँच, लेकिन सज्जाकार (और कार्यशील परिभाषाएँ) रनटाइम पर अमल, केवल एक चीज अजगर संकलन समय पर करता है अपने कोड संकलन है। – Duncan
विधि 2 के साथ कुछ भी गलत नहीं है। उन्हें 'आयात प्लगइन' जैसी कुछ करें और '@ plugin.register (' my_method_name ') \ ndef somefunc_meeting_an_api_spec(): ... ' –
आप इस पर एक नजर डालना चाहेंगे [plac] (http://pypi.python.org/pypi/plac) वह करता है। – georg