2010-10-13 12 views
8

क्या पाइथन में/आयात कथन से अधिभार करना संभव है?क्या पाइथन में/से आयात करना संभव है?

उदाहरण के लिए, jvm_object संभालने वर्ग JVM का एक उदाहरण है, यह संभव है इस कोड को लिखने के लिए:

class JVM(object): 

    def import_func(self, cls): 
    return something... 

jvm = JVM() 

# would invoke JVM.import_func 
from jvm import Foo 
+3

क्यों? क्या आप कभी ऐसा करेंगे? –

+0

@ एसएलट अनिवार्य रूप से, मैं रिमोट जेवीएम (पाइथन प्रोग्राम में) से पैकेज और कक्षाएं आयात करना चाहता हूं और हालांकि मैं एक आयात विधि प्रदान कर सकता हूं, मैं पाइथन सिंटैक्स का पुन: उपयोग करना चाहता हूं। – Barthelemy

+0

"रिमोट जेवीएम से आयात पैकेज और कक्षाएं"? फाइल नहीं है? यह कैसे काम करने जा रहा है? आप .pyc फ़ाइलों के निर्माण का प्रबंधन कैसे करेंगे? "फाइल" के साथ क्या गलत है? वे वास्तव में अच्छी तरह से काम करते हैं। फ़ाइल सिस्टम को रिमोट करने के साथ क्या गलत है? यह वास्तव में अच्छी तरह से काम करता है। –

उत्तर

7

This post दर्शाता है कि कैसे वेब पर मॉड्यूल आयात करने के लिए PEP-302 में शुरू की कार्यक्षमता का उपयोग करने के लिए। मैं इसे सुझाए गए उपयोग के बजाए आयात विवरण को कस्टमाइज़ करने का एक उदाहरण के रूप में पोस्ट करता हूं;)

+0

धन्यवाद, यह अच्छी तरह से काम करता है! – Barthelemy

3

पाइथन जैसी गतिशील भाषा में संभव नहीं है, लेकिन क्या हमें वास्तव में सब कुछ दुरुपयोग करने की आवश्यकता है? वैसे भी, यहाँ यह है:

from types import ModuleType 
import sys 

class JVM(ModuleType): 
    Foo = 3 

sys.modules['JVM'] = JVM 

from JVM import Foo 
print Foo 

लेकिन एक पैटर्न मैं कई पुस्तकालयों/परियोजनाओं में देखा है एक _make_module() समारोह है, जो गतिशील रूप से एक ModuleType बनाता है और उसमें जो कुछ initializes किसी तरह का है। उसके बाद, वर्तमान मॉड्यूल को नए मॉड्यूल द्वारा प्रतिस्थापित किया जाता है (sys.modules पर असाइनमेंट का उपयोग करके) और _make_module() फ़ंक्शन हटा दिया जाता है। इसका लाभ यह है कि आप मॉड्यूल पर लूप कर सकते हैं और उस लूप के अंदर मॉड्यूल में ऑब्जेक्ट्स भी जोड़ सकते हैं, जो कभी-कभी काफी उपयोगी होता है (लेकिन सावधानी के साथ इसका उपयोग करें!)।

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