2017-08-30 19 views
5

जावा में मैं अपनी पूरी तरह से योग्य नाम का हवाला यह आयात किए बिना एक वर्ग या विधि आह्वान कर सकते हैं:अपने पूर्ण योग्य नाम का उपयोग कर पाइथन विधि कैसे शुरू करें?

public class Example { 
    void example() { 

     //Use BigDecimal without importing it 
     new java.math.BigDecimal(1); 
    } 
} 

इसी प्रकार के वाक्य रचना स्पष्ट रूप से का उपयोग कर काम नहीं करेगा पायथन:

class Example: 
    def example(self): 

     # Fails 
     print(os.getcwd()) 

अच्छा अभ्यास और पीईपी सिफारिशें एक तरफ, क्या मैं पाइथन में भी वही कर सकता हूं?

+1

नहीं, आप इसे आयात किए बिना कक्षा या विधि का आह्वान नहीं कर सकते - आप आयात से क्यों बचना चाहते हैं? आप इसे अपने फ़ंक्शन में स्थानीय रूप से आयात कर सकते हैं जो आपके जावा 1-लाइनर को पाइथन में 2-लाइनर में बदल देता है। क्या यह एकमात्र चीज है जिसे आप टालने की कोशिश कर रहे हैं? – mgilson

+0

मैं एक लाइनर की कल्पना करता हूं क्योंकि मैं कुछ एएसटी-आधारित कोड इंजेक्शन के साथ खेल रहा हूं और मैं जितना संभव हो सके मूल मॉड्यूल को संशोधित करना चाहता हूं – noamt

उत्तर

2

इसकी परिभाषा तब तक मौजूद नहीं होती है जब इसका परिभाषा चलता है, जिसका मतलब है कि मॉड्यूल आयात किया जाता है, जिसका अर्थ है कि मॉड्यूल आयात किया जाता है (जब तक कि यह आपकी स्क्रिप्ट सीधे नहीं चलती)।

सबसे नज़दीकी चीज़ जो मैं सोच सकता हूं print(__import__('os').getcwd()) है।

+0

ऐसा लगता है कि '__import() __' इस मामले में पूरी तरह से काम करेगा – noamt

+1

@noamt वास्तव में, आपको वास्तव में '__import__' का उपयोग नहीं करना चाहिए। यदि आप ऐसा कुछ चाहते हैं, तो 'importlib.import_module' का उपयोग करें। –

+0

क्या '__import__' या' importlib' कक्षा के नामों के साथ पूरी तरह से योग्य पथ संभालता है? जैसे 'Module.OuterClass.InnerClass.some_classmethod'? – mgilson

1

मुझे यकीन है कि आप बिल्कुल वैसा ही कर सकते हैं नहीं कर रहा हूँ, लेकिन आप केवल समारोह आयात कर सकते हैं:

from foo.bar import baz as baz_fn 

baz_fn() 

जहां foo.bar मॉड्यूल समारोह में शामिल है और baz इस बात का पूरी तरह से योग्य नाम है उस फ़ंक्शन का नाम जिसे आप आयात करना चाहते हैं। यह इसे baz_fn नाम के रूप में आयात करेगा।

2

नहीं। यदि आप पायथन में एक मॉड्यूल का उपयोग करना चाहते हैं, तो आपको स्पष्ट रूप से इसका नाम दायरे में आयात करना होगा। और, जैसा कि @AlexHall ने उल्लेख किया है, आयात समय तक एक वर्ग/फ़ंक्शन/मॉड्यूल मौजूद नहीं है। import -ing के बिना इसे एक्सेस करने का कोई तरीका नहीं है। हालांकि मेरी राय में, यह बेहतर और अधिक स्पष्ट कोड बनाता है। मॉड्यूल नाम आयात करते समय यह आपको स्पष्ट होने के लिए मजबूर करता है।

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