कस्टम विधियों और विशेषताओं के साथ अंतर्निहित पायथन प्रकारों का विस्तार
पायथन में, आप ऐसे परिदृश्यों का सामना कर सकते हैं जहां आप अंतर्निहित का विस्तार करना चाहते हैं- अतिरिक्त विधियों या विशेषताओं वाले प्रकारों में। हालाँकि, इन प्रकारों को सीधे बदलने की अनुमति नहीं है। &&&]
उपवर्गीकरण और नेमस्पेस प्रतिस्थापन का उपयोग करके समाधान
हालांकि आप सीधे मूल प्रकार को नहीं बढ़ा सकते हैं, एक चतुर समाधान मौजूद है। लक्ष्य प्रकार को उपवर्गीकृत करके और बाद में इसे अंतर्निहित/वैश्विक नामस्थान में प्रतिस्थापित करके, आप प्रभावी ढंग से वांछित व्यवहार की नकल कर सकते हैं।
यहां पायथन में एक कार्यान्वयन है:# निर्मित- नेमस्पेस में आयात __बिल्टइन__ # विस्तारित उपवर्ग क्लास मिस्ट्र(str): def पहले_अंतिम(स्वयं): यदि स्वयं: स्वंय लौटें[0] स्वंय[-1] अन्य: वापस करना '' # अंतर्निहित नेमस्पेस पर उपवर्ग के साथ मूल str को प्रतिस्थापित करें __बिल्टइन__.str = मिस्ट्र प्रिंट(str(1234).first_last()) #14 प्रिंट(str(0).first_last()) # 00 प्रिंट(str('').first_last()) # '' # ध्यान दें कि शाब्दिक वाक्यविन्यास द्वारा बनाई गई वस्तुओं में विस्तारित विधियाँ नहीं होंगी print('0'.first_last()) # AttributeError: 'str' ऑब्जेक्ट में कोई विशेषता नहीं है 'first_last'
# Built-in namespace
import __builtin__
# Extended subclass
class mystr(str):
def first_last(self):
if self:
return self[0] self[-1]
else:
return ''
# Substitute the original str with the subclass on the built-in namespace
__builtin__.str = mystr
print(str(1234).first_last()) # 14
print(str(0).first_last()) # 00
print(str('').first_last()) # ''
# Note that objects created by literal syntax will not have the extended methods
print('0'.first_last()) # AttributeError: 'str' object has no attribute 'first_last'
हालांकि, यह ध्यान रखना महत्वपूर्ण है कि शाब्दिक सिंटैक्स ('स्ट्रिंग') का उपयोग करके बनाई गई ऑब्जेक्ट उदाहरण बने रहेंगे असंशोधित str प्रकार और कस्टम विधियों को इनहेरिट नहीं करेगा। अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3