"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > आप पायथन मॉड्यूल में कक्षा-समान व्यवहार की नकल कैसे कर सकते हैं?

आप पायथन मॉड्यूल में कक्षा-समान व्यवहार की नकल कैसे कर सकते हैं?

2024-11-16 को प्रकाशित
ब्राउज़ करें:524

How Can You Mimic Class-Like Behavior in Python Modules?

getattr

का उपयोग करके मॉड्यूल में क्लास-लाइक व्यवहार को गतिशील रूप से कार्यान्वित करना, कुछ परिदृश्यों में, इसकी नकल करना वांछनीय हो सकता है __getattr__ का व्यवहार किसी कक्षा पर नहीं बल्कि संपूर्ण मॉड्यूल के लिए। यह मॉड्यूल पर विशेषता लुकअप के आधार पर क्लास इंस्टेंसेस के गतिशील निर्माण और उनके तरीकों के आह्वान की अनुमति देता है। &&&]पायथन केवल कक्षाओं में ऐसे तरीकों की जांच करता है।

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

  • रैपर-आधारित समाधान
एक दृष्टिकोण मॉड्यूल के चारों ओर एक आवरण बनाना है। Sys.modules विभिन्न ऑब्जेक्ट प्रकारों के प्रति सहनशील है, इसलिए हम मॉड्यूल को एक क्लास के अंदर लपेट सकते हैं और इसे sys.modules[__name__] को असाइन कर सकते हैं। यह मॉड्यूल को संशोधित किए बिना गतिशील व्यवहार की अनुमति देता है। हालाँकि, यह तकनीक केवल मॉड्यूल-स्तरीय पहुंच पर लागू होती है। मॉड्यूल के भीतर परिभाषित वर्ग के उदाहरण के साथ मॉड्यूल। आयात मशीनरी इस हैक को सक्षम करते हुए, यह अंतिम प्रतिस्थापन चरण करती है। निम्नलिखित उदाहरण इस दृष्टिकोण को प्रदर्शित करता है:

# मॉड्यूल foo.py आयात sys कक्षा फू: def function1(स्वयं, *args): def function2(स्वयं, *args): sys.modules[__name__] = Foo()

अब, मॉड्यूल में परिभाषित कार्यों को Foo के उदाहरण के माध्यम से एक्सेस किया जा सकता है।

Considerations

इन तकनीकों का उपयोग करते समय, sys.modules असाइनमेंट के बाद अन्य मॉड्यूल तत्व अप्राप्य हो सकते हैं। मॉड्यूल सामग्री खोने से बचने के लिए प्रतिस्थापन वर्ग के भीतर सभी आवश्यक कार्यक्षमता को परिभाषित करें। आयात विवरण का प्रकार. __all__ से __module__ और __qualname__ जैसी विशेषताओं को हटा दें।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3