2009-10-05 16 views
10

मैं पाइथन सीख रहा हूं, और हमेशा के रूप में, मैं अपने स्टार्टर परियोजनाओं के साथ महत्वाकांक्षी हूं। मैं ऐप इंजन के लिए एक सामुदायिक साइट टूलकिट के लिए प्लगइन सिस्टम पर काम कर रहा हूं। मेरी प्लगइन सुपरक्लास में install_path नामक एक विधि है। मैं के लिए के लिए __path__ प्राप्त करना चाहता हूं (जो इस मामले में सबक्लास होगा)। समस्या यह है कि, __module__ मॉड्यूल इंस्टेंस के बजाए str देता है। eval() अविश्वसनीय और अवांछनीय है, इसलिए मुझे वास्तविक मॉड्यूल इंस्टेंस पर अपने हाथों को प्राप्त करने का एक अच्छा तरीका चाहिए जिसमें evalstr को शामिल नहीं किया गया है, मैं __module__ से वापस आ गया हूं।पायथन में कक्षा के लिए मॉड्यूल उदाहरण कैसे प्राप्त करूं?

उत्तर

11

sys.modules dict सभी आयातित मॉड्यूल शामिल है, तो आप उपयोग कर सकते हैं: अगर सब आप चाहते हैं मॉड्यूल के पथ है

mod = sys.modules[__module__] 
1

कैसे import X तरह Importing modules के बारे में

X = __import__(‘X’) काम करता है, अंतर यह है कि आप 1) स्ट्रिंग के रूप मॉड्यूल का नाम गुजरती हैं, और 2) के साथ स्पष्ट रूप से अपने वर्तमान नाम स्थान में एक चर लिए असाइन करें।

आप मॉड्यूल नाम ('एक्स' के बजाय) पास कर सकते हैं और मॉड्यूल उदाहरण वापस प्राप्त कर सकते हैं। पायथन यह सुनिश्चित करेगा कि आप एक ही मॉड्यूल को दो बार आयात न करें, इसलिए आपको उस उदाहरण को वापस लेना चाहिए जिसे आपने पहले आयात किया था।

+0

अच्छा, यह काम करता प्रतीत होता है। मैं थोड़े से एक क्लीनर समाधान की उम्मीद कर रहा हूं, लेकिन अगर कुछ और नहीं आता है, तो मैं इसे स्वीकार करूंगा। –

+0

ध्यान दें कि यदि आप '__import __ ('foo.bar') करते हैं, तो यह' foo.bar' नहीं होगा, 'foo'bar' वापस करेगा। विवरण के लिए '__import__' दस्तावेज़ देखें। –

+0

वैसे, लुकास का समाधान बहुत बेहतर क्यों है, इसके कुछ अच्छे कारण हैं। –

1

वैकल्पिक रूप से, आप मॉड्यूल के वैश्विक __file__ variable उपयोग कर सकते हैं।

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