ক্লাসগুলি প্রসারিত করার বিশেষ উপায় (বিশেষত অর্থ, নতুন পদ্ধতি যুক্ত করা, বিদ্যমানগুলি পরিবর্তন না করা), এমনকি অন্তর্নির্মিত, হ'ল একটি প্রিপ্রসেসর ব্যবহার করা যা পাইথনের খণ্ডের বাইরে / উপরে প্রসারিত করার ক্ষমতা যুক্ত করে এক্সটেনশানটিকে রূপান্তরিত করে পাইথনের আগে পাইথন সিনট্যাক্স আসলে এটি দেখতে পায় to
আমি পাইথন 2 এর str()
ক্লাসটি বাড়ানোর জন্য এটি করেছি extend 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'
প্রিপ্রোসেসর এটি খায়, বানরপ্যাচিং ছাড়াই সাধারণ পাইথনকে ছিটকে দেয় এবং পাইথন যা করতে ইচ্ছা করেছিল তা করে।
এসি প্রিপ্রোসেসর যেমন সি তে কার্যকারিতা যুক্ত করে, তেমনই পাইথন প্রিপ্রোসেসর পাইথনে কার্যকারিতা যুক্ত করতে পারে।
আমার প্রিপ্রসেসর বাস্তবায়ন একটি স্ট্যাক ওভারফ্লো উত্তরের জন্য খুব বড়, তবে যারা আগ্রহী হতে পারে তাদের জন্য এটি এখানে গিটহাবে রয়েছে।