विस्तारित करने का एक अन्य तरीका (विशेष रूप से अर्थ है, नए तरीके जोड़ें, मौजूदा वाले नहीं बदलें) कक्षाएं, यहां तक कि अंतर्निहित भी, एक प्रीप्रोसेसर का उपयोग करना है जो पायथन के दायरे से बाहर / ऊपर विस्तार करने की क्षमता जोड़ता है, विस्तार को परिवर्तित करना पाइथन से पहले सामान्य पायथन सिंटैक्स वास्तव में इसे देखने के लिए मिलता है।
str()
उदाहरण के लिए, मैंने पायथन 2 की कक्षा का विस्तार करने के लिए ऐसा किया है । str()
इस तरह के रूप में उद्धृत किया आंकड़ों के अंतर्निहित संबंध की वजह से एक विशेष रूप से दिलचस्प लक्ष्य है 'this'
और 'that'
।
यहाँ कुछ विस्तार कोड है, जहाँ केवल जोड़ा गया गैर-पायथन सिंटैक्स है extend:testDottedQuad
:
extend:testDottedQuad
def testDottedQuad(strObject):
if not isinstance(strObject, basestring): return False
listStrings = strObject.split('.')
if len(listStrings) != 4: return False
for strNum in listStrings:
try: val = int(strNum)
except: return False
if val < 0: return False
if val > 255: return False
return True
जिसके बाद मैं प्रीप्रोसेसर को खिलाए गए कोड में लिख सकता हूं:
if '192.168.1.100'.testDottedQuad():
doSomething()
dq = '216.126.621.5'
if not dq.testDottedQuad():
throwWarning();
dqt = ''.join(['127','.','0','.','0','.','1']).testDottedQuad()
if dqt:
print 'well, that was fun'
प्रीप्रोसेसर ने वह खाया, जो बिना पैंक्रिया के सामान्य पाइथन को थूक देता है, और पाइथन वही करता है जो मैंने करने का इरादा किया था।
जिस तरह ac प्रीप्रोसेसर c में कार्यक्षमता जोड़ता है, उसी प्रकार Python प्रीप्रोसेसर भी Python में कार्यक्षमता जोड़ सकता है।
मेरे पूर्वप्रक्रमक कार्यान्वयन एक ढेर अतिप्रवाह उत्तर के लिए बहुत बड़ी है, लेकिन जो लोग रुचि हो सकती है के लिए, यह है यहाँ GitHub पर।