2009-06-13 22 views
91
में मौजूदा मॉड्यूल के गुण के लिए एक संदर्भ पाने के लिए कैसे

क्या मैं कमांड लाइन में इस प्रकार दिखाई देगा करने के लिए कोशिश कर रहा हूँ:अजगर

>>> import mymodule 
>>> names = dir(mymodule) 

मैं कैसे सभी के नाम mymodule में परिभाषित के लिए एक संदर्भ प्राप्त कर सकते हैं mymodule के भीतर से ही?

कुछ इस तरह:

# mymodule.py 
names = dir(__thismodule__) 

उत्तर

103

बस वैश्विक()

वैश्विक का उपयोग करें() - एक शब्दकोश मौजूदा वैश्विक प्रतीक तालिका का प्रतिनिधित्व लौटें। यह हमेशा वर्तमान मॉड्यूल के शब्दकोश है (एक समारोह या विधि के अंदर, इस मॉड्यूल जहां यह परिभाषित किया गया है, नहीं मॉड्यूल जिसमें से यह कहा जाता है)।

http://docs.python.org/library/functions.html#globals

+3

परिभाषा मॉड्यूल के बजाय कॉलिंग मॉड्यूल के ग्लोबल() तक पहुंचने का कोई तरीका है? – dimo414

+5

आप ट्रेसबैक मॉड्यूल (http://docs.python.org/library/traceback.html) से कॉलर के ग्लोबल्स प्राप्त करने का प्रयास कर सकते हैं, लेकिन यह अंधेरे जादू क्षेत्र में हो रहा है। मुझे नहीं पता कि आप क्या करने की कोशिश कर रहे हैं, लेकिन अगर आपको इसकी ज़रूरत है तो आप अपने डिजाइन पर पुनर्विचार करना चाहेंगे। –

10

इसके अलावा बाहर की जाँच में निर्मित inspect मॉड्यूल। यह बहुत आसान हो सकता है।

+1

एक प्रासंगिक उपयोग उदाहरण की उम्मीद है। लिंक यहां मूल्य के कुछ भी नहीं छोड़ सकता है। – IAbstract

121

जैसा कि पहले उल्लेख, वैश्विक आप के रूप में (dir जाने के बजाय किसी शब्दकोश), जो आप के नाम मॉड्यूल में परिभाषित की एक सूची देता है देता है। जिस तरह से मैं इसे आम तौर पर देखता हूं वह इस प्रकार है:

import sys 
dir(sys.modules[__name__]) 
+1

मैं एक टिप्पणी है कि इस '__main__' मॉड्यूल के लिए काम नहीं होता है (जो क्या टर्मिनल पर मॉड्यूल रन कहा जाता है), क्योंकि कि sys.modules में सूचीबद्ध किया जाना प्रतीत नहीं होता है जोड़ने के लिए जा रहा था - लेकिन यह वास्तव में करता है काम :) – markm

+0

हालांकि, यह ipdb से काम नहीं करता है (अपनी फ़ाइल में "आयात ipdb; ipdb.set_trace()" डालें)। – gatoatigrado

+9

बढ़िया! इसने मुझे वर्तमान मॉड्यूल के डॉकस्ट्रिंग को उपयोग संदेश के रूप में उपयोग करने की अनुमति दी - 'sys.modules [__ name __] .__ doc__'। – george