मेरे पास एक मॉड्यूल है जो लगभग उपयोगिता प्रकार कार्यों और कोर एपीआई कार्यों के बीच आधे हिस्से में विभाजित है। मुझे __all__
में help()
उपयोगी होने के लिए, और यह भी निर्दिष्ट करने के लिए कि मॉड्यूल में कौन से फ़ंक्शन/कक्षाएं/आदि बाहरी उपयोग के लिए हैं, लेकिन मैं भी from mymodule import *
का समर्थन करने के तरीके के रूप में समर्थन करना चाहता हूं अन्य मॉड्यूल में सिर्फ कोर कार्यक्षमता। क्या ऐसा करने के लिए कोई रास्ता है?एक मॉड्यूल में __all__ से 'से ... आयात *' api अलग कैसे परिभाषित करें?
उत्तर
लगभग। एक ओर जहां आप __all__
इस तरह से दोहरा काम करना नहीं हो सकता है, आप अपने खुद आभासी एपीआई मॉड्यूल जो तब आयात किया जा सकता ...
class fake_module(object):
def __init__(self, name, *args):
self.name = name
self.__all__ = []
all_objects = globals()
for name in args:
self.__dict__[name] = all_objects[name]
self.__all__.append(name)
def register(self):
sys.modules["%s.%s" % (__name__, self.name)] = self
fake_module('api', 'class1', 'class2', 'func3', 'exception4').register()
फिर from mymodule import *
के बजाय अन्य मॉड्यूल में आप के लिए क्या कर सकते हैं from mymodule.api import *
जोड़ सकते हैं एक ही मॉड्यूल में सबकुछ रखते हुए बस वांछित सबसेट प्राप्त करें।
नोट: from ... import *
आमतौर पर अच्छा अभ्यास नहीं है, और बड़ी सावधानी से और केवल मॉड्यूल/संकुल स्पष्ट रूप से राज्य है कि है कि वे मन में इस तरह के उपयोग के साथ डिजाइन किया गया है के साथ किया जाना चाहिए।
मुझे नहीं लगता कि ऐसा करने का कोई तरीका है - कम से कम एक साफ तरीका नहीं। यहां तक कि पायथन आधिकारिक मॉड्यूल में भी इसके दस्तावेज़ों में बहुत से उपयोग कार्य दिखाई देते हैं। अगर मैं अलग करता हूं, तो मैं क्या करूँगा, दो अलग-अलग मॉड्यूल बनाना है। वैसे भी, उपयोग करने के लिए from module import *
एक अच्छा अभ्यास नहीं है और मैं तुम्हें यह करने के लिए, बहुत कम ऐसे अभ्यास :)
उपयोगकर्ता द्वारा परिभाषित उपयोगिता मॉड्यूल के लिए यह बेहतर अभ्यास imho है। – Evpok
@Evpok उपयोगकर्ता द्वारा परिभाषित उपयोगिता मॉड्यूल क्या है? क्या वे पाइथन कंसोल में इस्तेमाल किए जाने वाले मॉड्यूल हैं? – brandizzi
मेरा मतलब है कि कुछ मॉड्यूल शॉर्टकट्स या स्थिरांक वाले अनुप्रयोगों, डिफ़ॉल्ट मानों, जादू संख्याओं, गंदे हैक्स के साथ हर जगह इस्तेमाल किए गए हैं ... – Evpok
आप नहीं हो सकता फिटिंग के लिए अपने मॉड्यूल डिजाइन करने के लिए आप क्या चाहते हैं की सिफारिश नहीं होगा: import *
व्यवहार से परिभाषित किया गया है __all__
।
बिल्कुल वही नहीं जो मैं चाहता हूं, लेकिन बहुत करीब है। 'mymodule.api आयात * से काफी अच्छा है। –
एथन, आपके fake_module
संभवतः सादे पुरानी पायथन के साथ बेहतर ढंग से पूरा किया जा सकता है। बस एक निर्देशिका सेटअप में अपने कोड के लिए कदम:
mymodule
__init__.py
api.py
util.py
_mymodule.py
कहाँ _mymodule.py
अपने वर्तमान कोड है।
में अपने __init__.py
:
from _mymodule import *
आप में कर रहे हैं api.py
# explicity import only those api classes you want to expose
# this will allow you to call `from mymodule.api import *`
import from _mymodule ApiClass1
import from _mymodule ApiClass2
# etc
तो अब आपके util.py
# explicity import only those util classes you want to expose
# this will allow you to call `from mymodule.util import *`
import from _mymodule UtilClass1
import from _mymodule UtilClass2
# etc
लिए भी यही करें आप कर सकते हैं:
# import everything willy nilly for your help()
from mymodule import *
# or import only the "public" values from api and util
from mymodule.api import *
from mymodule.util import *
इस तरह अपना कोड तोड़ना एक बड़े पैमाने पर मॉड्यूल को व्यवस्थित करने के लिए उपयोगी हो सकता है जिसे आप अभी भी शीर्ष स्तर के नामस्थान से एक्सेस करने में सक्षम होना चाहते हैं। लेकिन मुझे brandizzi
से सहमत होना होगा कि इस मॉड्यूल का उपयोग करने वाले कोड में from mymodule import *
का उपयोग करना आम तौर पर एक बुरा विचार है। उन आयातों का उपयोग कर रहे कोड की पारदर्शिता में आप खोने के आयात में आसानी से क्या हासिल करते हैं।
पूर्ण, पूर्ण उत्तर जो सामान्य रूप से किए गए विवरण का विवरण देता है। –
- 1. "आयात मॉड्यूल" और फिर "पैकेज आयात मॉड्यूल से" मॉड्यूल को फिर से लोड क्यों करता है?
- 2. एक अलग मॉड्यूल से ऑटोवायरिंग बीन्स
- 3. कैसे एक अलग मॉड्यूल
- 4. पावरशेल - रनस्पेस में आयात-मॉड्यूल कैसे करें
- 5. Enum प्रथाओं - एक वर्ग/अलग से परिभाषित करें, सार्वजनिक/निजी
- 6. गतिशील रूप से पाइथन मॉड्यूल आयात करना
- 7. गतिशील रूप से पाइथन मॉड्यूल आयात करना
- 8. एक बहु-मॉड्यूल मेवेन बनाना स्वतंत्र रूप से अलग-अलग मॉड्यूल का निर्माण और रिलीज़ करना?
- 9. गतिशील रूप से आयातित मॉड्यूल में परिभाषित कक्षाओं को दोहराएं
- 10. आयात एक और मॉड्यूल से एक वर्ग चर
- 11. एक उपनिर्देशिका से एक फ़ाइल आयात करें?
- 12. वर्तमान फ़ोल्डर के बगल में एक फ़ोल्डर से मॉड्यूल कैसे आयात करें?
- 13. पायथन मॉड्यूल को डी-आयात कैसे करें?
- 14. रेल में जीमेल के माध्यम से संपर्क कैसे आयात करें?
- 15. एक ही नाम के पायथन मॉड्यूल से एक फ़ंक्शन/क्लास आयात करना
- 16. जेथॉन मॉड्यूल से जावा कक्षाओं को आयात करने में असमर्थ
- 17. ऑटोऑपेन बाहरी रूप से परिभाषित मॉड्यूल
- 18. निर्देशिका में सभी मॉड्यूल आयात करें
- 19. SkypeKit Skype API के साथ प्रोग्रामिंग से अलग कैसे है?
- 20. पायथन एक कक्षा में केवल एक मॉड्यूल आयात करें
- 21. कम से कम एक मॉड्यूल में एक अनुपस्थित रूप से निर्भर मॉड्यूल
- 22. आयात मॉड्यूल
- 23. सब कुछ आयात करना (*) मॉड्यूल से गतिशील रूप से
- 24. एंबेडेड पायथन 2.7.2 उपयोगकर्ता द्वारा परिभाषित निर्देशिका से मॉड्यूल आयात करना
- 25. Python .egg फ़ाइलों से मॉड्यूल कैसे आयात करता है?
- 26. मैं पायथन में एक तृतीय पक्ष मॉड्यूल कैसे आयात करूं?
- 27. केवल पायथन में एक मॉड्यूल आयात करें यदि यह पहले से मौजूद नहीं है
- 28. मॉड्यूल को दो बार आयात करने से कैसे रोकें?
- 29. एक पायथन मॉड्यूल के 2 अलग-अलग उदाहरण प्राप्त करें
- 30. पायडॉन में "मॉड्यूल आयात _" से क्या करता है?
यहां सभी पागल होने की कोई वास्तविक आवश्यकता नहीं है ... बस 'एपीआई' नामक एक अलग फ़ाइल बनाएं और इसमें फ़ंक्शंस का सबसेट आयात करें, और उसके बाद इसे मॉड्यूल के __init__.py में आयात करें। – Dave
@ डेव: मॉड्यूल एकल फाइलें हैं, और ऐसे में '__init __। Py's नहीं है। संकुल वे हैं जिनके पास * __init __। py' फ़ाइल होनी चाहिए, और अन्य फाइलें भी हो सकती हैं। जिस लाइब्रेरी का मैं विकास कर रहा हूं वह एक फ़ाइल में आराम से फिट बैठता है (हाँ, मैंने इसके लिए पैकेज रूट की कोशिश की, और अंत में एक फ़ाइल/मॉड्यूल लेआउट पर वापस स्विच किया)। –
पर्याप्त मेला। जब आप मानते हैं ...:) – Dave