मैं उन तकनीकों की तलाश में हूं जो उपयोगकर्ताओं को किसी एप्लिकेशन में मॉड्यूल को ओवरराइड करने या नए मॉड्यूल के साथ एप्लिकेशन का विस्तार करने की अनुमति देते हैं।पायथन में उपयोगकर्ता कोड एक्सटेंशन सक्षम करने के लिए प्रचलित तकनीकें क्या हैं?
पाइड्रा नामक एक एप्लिकेशन की कल्पना करें। यह वर्तमान में एक सर्कल कक्षा प्रदान करता है, जो आकार को विरासत में लेता है। पैकेज पेड़ की तरह लग सकता है:
/usr/lib/python/
└── pydraw
├── __init__.py
├── shape.py
└── shapes
├── circle.py
└── __init__.py
अब मैं गतिशील खोज और उपयोगकर्ता मॉड्यूल है कि एक नए आकार, या शायद यह भी आकार वर्ग में ही लागू की लोडिंग सक्षम करना चाहते हैं लगता है। यह सबसे सरल एक उपयोगकर्ता के पेड़ जैसे आवेदन पेड़ के रूप में एक ही संरचना, के लिए के लिए लगता है:
/home/someuser/python/
└── pydraw
├── __init__.py
├── shape.py <-- new superclass
└── shapes
├── __init__.py
└── square.py <-- new user class
दूसरे शब्दों में, मैं उपरिशायी और से समान नाम वाले फाइलों के साथ एक आवेदन पत्र पेड़ मुखौटा करना चाहते हैं उपयोगकर्ता का पेड़, या कम से कम उस स्पष्ट संरचना को पाइथन बिंदु से प्राप्त करें।
फिर, sys.path या PYTHONPATH कॉन्फ़िगर करके, pydraw.shapes.square खोज योग्य हो सकता है। हालांकि, पायथन की मॉड्यूल पथ खोज को मॉड्यूल जैसे मॉड्यूल नहीं मिलते हैं। मुझे लगता है कि ऐसा इसलिए है क्योंकि __method__
में पहले से ही एक अन्य पथ पर एक पैरेंट मॉड्यूल शामिल है।
आप इस कार्य को पायथन के साथ कैसे पूरा करेंगे?
धन्यवाद जूलियन- expand_path ठीक वही है जो मैं ढूंढ रहा था! मुझे गलती से विश्वास था कि एक पैकेज केवल एक निर्देशिका पेड़ से लोड किया जा सकता है। – Reece