பைதான் நிரலாக்கத்தின் பரந்த உலகில், ஆரம்பநிலையாளர்களால் அடிக்கடி கவனிக்கப்படாத அம்சங்களின் தொகுப்பு உள்ளது, ஆனால் மொழியின் சுற்றுச்சூழல் அமைப்பில் குறிப்பிடத்தக்க முக்கியத்துவம் உள்ளது.
மந்திர முறைகள் முன் முறைகளின் தொகுப்பாகும்defiசிறப்பு தொடரியல் அம்சங்களை வழங்கும் பைத்தானில் உள்ள நைட்ஸ். தொடக்கத்திலும் முடிவிலும் உள்ள இரட்டைக் கோடுகளால் அவை எளிதில் அடையாளம் காணப்படுகின்றன __init__, __call__, __len__
… போன்றவை.
மேஜிக் முறைகள் தனிப்பயன் பொருள்கள் உள்ளமைக்கப்பட்ட பைதான் வகைகளைப் போலவே செயல்பட அனுமதிக்கின்றன.
இந்த கட்டுரையில், சக்திவாய்ந்த டண்டர் செயல்பாடுகளில் கவனம் செலுத்துவோம். அவற்றின் நோக்கத்தை ஆராய்ந்து, அவற்றின் பயன்பாடு பற்றி விவாதிப்போம்.
நீங்கள் பைதான் புதியவராக இருந்தாலும் சரி அல்லது அனுபவம் வாய்ந்த புரோகிராமராக இருந்தாலும் சரி, இந்தக் கட்டுரையானது டண்டர் செயல்பாடுகளைப் பற்றிய விரிவான புரிதலை உங்களுக்கு வழங்குவதை நோக்கமாகக் கொண்டுள்ளது, இது உங்கள் பைதான் குறியீட்டு அனுபவத்தை மிகவும் திறமையாகவும் சுவாரஸ்யமாகவும் ஆக்குகிறது.
நினைவில் கொள்ளுங்கள், பைத்தானின் மந்திரம் அதன் எளிமை மற்றும் பல்துறையில் மட்டுமல்ல, டண்டர் செயல்பாடுகள் போன்ற அதன் சக்திவாய்ந்த அம்சங்களிலும் உள்ளது.
ஒருவேளை எல்லாவற்றிலும் மிக அடிப்படையான டண்டர் செயல்பாடு. இது ஒரு புதிய பொருளை உருவாக்கும் போது (அல்லது பெயர் குறிப்பிடுவது போல், துவக்கும் போது) பைதான் தானாகவே அழைக்கும் மேஜிக் முறை.__init__
வகுப்பு பீஸ்ஸா:
def __init__(சுய, அளவு, மேல்புறம்):
self.size = அளவு
self.topings = மேல்புறங்கள்
# இப்போது பீட்சாவை உருவாக்குவோம்
my_pizza = பீஸ்ஸா('பெரிய', ['பெப்பரோனி', 'காளான்கள்'])
அச்சு(my_pizza.size) # இது அச்சிடும்: பெரியது
அச்சு(my_pizza.toppings) # இது அச்சிடும்: ['பெப்பரோனி', 'காளான்கள்']
இந்த எடுத்துக்காட்டில், Pizza எனப்படும் ஒரு வகுப்பு உருவாக்கப்பட்டது. துவக்க நேரத்தில் குறிப்பிடும் அளவுருக்களை உள்ளடக்கிய எங்கள் __init__ செயல்பாட்டை அமைத்து, அவற்றை எங்கள் தனிப்பயன் பொருளுக்கு பண்புகளாக அமைக்கிறோம்.
இங்கே, இது வகுப்பின் நிகழ்வைக் குறிக்கப் பயன்படுத்தப்படுகிறது. எனவே self.size = size என்று எழுதும்போது, "ஏய், இந்த பீட்சா பொருளுக்கு ஒரு பண்புக்கூறு அளவு உள்ளது. size
, மற்றும் நான் பொருளை உருவாக்கும் போது நான் வழங்கிய எந்த அளவிலும் இருக்க வேண்டும் என்று நான் விரும்புகிறேன்".
இது பைத்தானின் மந்திர முறை, இது நம்மை அனுமதிக்கிறது defiஎங்கள் தனிப்பயன் உருப்படிக்கான விளக்கத்தை நிஷ் செய்யவும்.
நீங்கள் ஒரு பொருளை அச்சிடும்போது அல்லது அதைப் பயன்படுத்தி சரமாக மாற்றும்போது str()
, பைதான் உங்களிடம் இருந்தால் சரிபார்க்கவும் defiநான் ஒரு முறையைக் கொண்டு வந்துள்ளேன் __str__
அந்த பொருளின் வகுப்பிற்கு.
அப்படியானால், பொருளை சரமாக மாற்ற அந்த முறையைப் பயன்படுத்தவும்.
ஒரு செயல்பாட்டைச் சேர்க்க எங்கள் பிஸ்ஸா உதாரணத்தை நீட்டிக்கலாம் __str__
பின்வருமாறு:
class Pizza: def __init__(self, size, toppings): self.size = அளவு self.toppings = toppings def __str__(self): return f"A {self.size} pizza with {', '.join(self.toppings )}" my_pizza = பீஸ்ஸா('பெரிய', ['பெப்பரோனி', 'காளான்கள்']) பிரிண்ட்(my_pizza) # இது அச்சிடும்: பெப்பரோனி, காளான் கொண்ட பெரிய பீஸ்ஸா
__repr__
__str__ செயல்பாடு என்பது ஒரு பொருளின் பண்புகளை விவரிக்கும் முறைசாரா வழி. மறுபுறம், தனிப்பயன் பொருளின் முறையான, விரிவான மற்றும் தெளிவற்ற விளக்கத்தை வழங்க __repr__ பயன்படுத்தப்படுகிறது.
நீங்கள் அழைத்தால் repr()
ஒரு பொருளில் அல்லது நீங்கள் பொருளின் பெயரை கன்சோலில் தட்டச்சு செய்தால், பைதான் ஒரு முறையைத் தேடும் __repr__
.
Se __str__
அது அல்ல defiநைட், பைதான் பயன்படுத்தும் __repr__
பொருளை அச்சிட அல்லது சரமாக மாற்ற முயற்சிக்கும்போது காப்புப்பிரதியாக. எனவே இது பெரும்பாலும் ஒரு நல்ல யோசனை defiகுறைந்தது முடிக்க __repr__
, நீங்கள் செய்யாவிட்டாலும் defiவெளியே வரும் __str__
.
இங்கே நாம் எப்படி முடியும் defiமுடிக்க __repr__
எங்கள் பீட்சா உதாரணத்திற்கு:
வகுப்பு பீஸ்ஸா:
def __init__(சுய, அளவு, மேல்புறம்):
self.size = அளவு
self.topings = மேல்புறங்கள்
def __repr__(self):
f"Pizza('{self.size}', {self.toppings})" திரும்பவும்
my_pizza = பீஸ்ஸா('பெரிய', ['பெப்பரோனி', 'காளான்கள்'])
அச்சு(repr(my_pizza)) # இது அச்சிடும்: பீஸ்ஸா('பெரிய', ['பெப்பரோனி', 'காளான்கள்'])
__repr__
பிஸ்ஸா பொருளை மீண்டும் உருவாக்க பைதான் கட்டளையாக இயக்கக்கூடிய ஒரு சரத்தை உங்களுக்கு வழங்குகிறது. __str__
மேலும் மனித விளக்கத்தை உங்களுக்கு வழங்குகிறது. இந்த டண்டர் முறைகளை கொஞ்சம் சிறப்பாக மெல்ல இது உங்களுக்கு உதவும் என்று நம்புகிறேன்!
பைத்தானில், ஆபரேட்டரைப் பயன்படுத்தி எண்களைச் சேர்க்க முடியும் என்பதை நாம் அனைவரும் அறிவோம் +
, என 3 + 5
.
ஆனால் சில தனிப்பயன் பொருளின் நிகழ்வுகளைச் சேர்க்க விரும்பினால் என்ன செய்வது?
டண்டர் செயல்பாடு __add__
அது நம்மை அதை செய்ய அனுமதிக்கிறது. அதற்கான திறனை நமக்குத் தருகிறது defiஆபரேட்டரின் நடத்தையை நிராகரித்தல் +
எங்கள் தனிப்பயனாக்கப்பட்ட பொருட்களில்.
நிலைத்தன்மையின் ஆர்வத்தில், நாம் விரும்புவதாக வைத்துக் கொள்வோம் defiநடத்தையை முடிக்க +
எங்கள் பீட்சா உதாரணத்தில். நாம் இரண்டு அல்லது அதற்கு மேற்பட்ட பீஸ்ஸாக்களை ஒன்றாக சேர்க்கும் போதெல்லாம், அது தானாகவே அவற்றின் அனைத்து டாப்பிங்ஸையும் இணைக்கும் என்று சொல்லலாம். இது எப்படி இருக்கும் என்பது இங்கே:
வகுப்பு பீஸ்ஸா:
def __init__(சுய, அளவு, மேல்புறம்):
self.size = அளவு
self.topings = மேல்புறங்கள்
def __add__(சுய, மற்றவை):
இல்லையெனில் (மற்ற, பிஸ்ஸா):
TypeError ஐ உயர்த்தவும் ("நீங்கள் மற்றொரு பீட்சாவை மட்டுமே சேர்க்க முடியும்!")
new_toppings = self.topings + other.toppings
திரும்ப பிஸ்ஸா(self.size, new_toppings)
# இரண்டு பீஸ்ஸாக்களை உருவாக்குவோம்
பீஸ்ஸா1 = பீஸ்ஸா('பெரியது', ['பெப்பரோனி', 'காளான்கள்'])
pizza2 = Pizza('பெரிய', ['ஆலிவ்', 'அன்னாசி'])
# இப்போது அவற்றை "சேர்ப்போம்"
ஒருங்கிணைந்த_பிஸ்ஸா = பீஸ்ஸா1 + பீஸ்ஸா2
அச்சு(combined_pizza.toppings) # இது அச்சிடும்: ['பெப்பரோனி', 'காளான்கள்', 'ஆலிவ்கள்', 'அன்னாசி']
இதேபோல் டண்டர் __add__
, நம்மாலும் முடியும் defiபோன்ற பிற எண்கணித செயல்பாடுகளை முடிக்கவும் __sub__
(ஆபரேட்டரைப் பயன்படுத்தி கழிப்பதன் மூலம் -
) மற்றும் __mul__
(ஆபரேட்டரைப் பயன்படுத்தி பெருக்குவதற்கு *
).
இந்த டண்டர் முறை நம்மை அனுமதிக்கிறது defiசெயல்பாட்டை முடிக்கவும் len()
எங்கள் தனிப்பயனாக்கப்பட்ட பொருட்களுக்கு திரும்ப வேண்டும்.
பைதான் பயன்படுத்துகிறது len()
பட்டியல் அல்லது சரம் போன்ற தரவு கட்டமைப்பின் நீளம் அல்லது அளவைப் பெற.
எங்கள் எடுத்துக்காட்டின் சூழலில், பீட்சாவின் "நீளம்" என்பது அதில் உள்ள டாப்பிங்ஸின் எண்ணிக்கை என்று கூறலாம். அதை எவ்வாறு செயல்படுத்தலாம் என்பது இங்கே:
வகுப்பு பீஸ்ஸா:
def __init__(சுய, அளவு, மேல்புறம்):
self.size = அளவு
self.topings = மேல்புறங்கள்
def __len__(சுய):
திரும்ப லென் (self.toppings)
# பீட்சாவை உருவாக்குவோம்
my_pizza = பீஸ்ஸா('பெரிய', ['பெப்பரோனி', 'காளான்கள்', 'ஆலிவ்ஸ்'])
அச்சு(len(my_pizza)) # இது அச்சிடும்: 3
__len__ முறையில், பட்டியலின் நீளத்தை மட்டுமே தருகிறோம் toppings
. இப்போது, len(my_pizza)
அதில் எத்தனை மேல்புறங்கள் உள்ளன என்பதை அது நமக்குத் தெரிவிக்கும் my_pizza
.
இந்த டண்டர் முறையானது பொருட்களை மீண்டும் இயக்கக்கூடியதாக இருக்க அனுமதிக்கிறது, அதாவது இது ஒரு லூப்பில் பயன்படுத்தப்படலாம்.
இதைச் செய்ய, நாமும் வேண்டும் defiசெயல்பாட்டை முடிக்க __next__
, இது பயன்படுகிறது defiமறு செய்கையில் அடுத்த மதிப்பை வழங்க வேண்டிய நடத்தையை நிஷ் செய்யவும். வரிசைமுறையில் கூடுதல் கூறுகள் இல்லை என்ற நிகழ்வின் மறுசெயல்பாட்டை இது குறிக்க வேண்டும். பொதுவாக விதிவிலக்கு மூலம் இதை அடைகிறோம் StopIteration
.
எங்கள் பீட்சா உதாரணத்திற்கு, டாப்பிங்ஸை மீண்டும் செய்ய விரும்புகிறோம் என்று வைத்துக்கொள்வோம். நாங்கள் எங்கள் பீஸ்ஸா வகுப்பை மீண்டும் செய்ய முடியும் definendo ஒரு முறை __iter__
:
வகுப்பு பீஸ்ஸா:
def __init__(சுய, அளவு, மேல்புறம்):
self.size = அளவு
self.topings = மேல்புறங்கள்
def __iter__(self):
self.n = 0
சுயமாக திரும்பு
def __next__(self):
self.n < len(self.toppings):
முடிவு = self.topings[self.n]
self.n += 1
திரும்ப முடிவு
வேறு:
StopIteration ஐ உயர்த்தவும்
# பீட்சாவை உருவாக்குவோம்
my_pizza = பீஸ்ஸா('பெரிய', ['பெப்பரோனி', 'காளான்கள்', 'ஆலிவ்ஸ்'])
# இப்போது அதை மீண்டும் மீண்டும் செய்வோம்
my_pizzaவில் முதலிடத்திற்கு:
அச்சு (முதல்)
இந்த வழக்கில், for loop அழைப்புகள் __iter__
, இது ஒரு கவுண்டரை துவக்குகிறது (self.n)
மேலும் பீட்சா பொருளையே திருப்பித் தருகிறது (self)
.
பின்னர், for loop அழைப்புகள் __next__
ஒவ்வொரு முதலிடத்தையும் பெற.
போது __next__
அனைத்து மசாலாப் பொருட்களையும் திருப்பித் தந்தது, StopIteration
இது ஒரு விதிவிலக்கை எறிகிறது மற்றும் ஃபார் லூப் இப்போது டாப்பிங்ஸ் எதுவும் இல்லை என்பதை அறிந்திருக்கிறது, எனவே மறு செய்கை செயல்முறையை நிறுத்தும்.
Ercole Palmeri
கடற்படைத் துறை ஒரு உண்மையான உலகளாவிய பொருளாதார சக்தியாகும், இது 150 பில்லியன் சந்தையை நோக்கி பயணித்துள்ளது...
கடந்த திங்கட்கிழமை, பைனான்சியல் டைம்ஸ் OpenAI உடன் ஒரு ஒப்பந்தத்தை அறிவித்தது. FT அதன் உலகத் தரம் வாய்ந்த பத்திரிகைக்கு உரிமம் அளிக்கிறது…
மில்லியன் கணக்கான மக்கள் ஸ்ட்ரீமிங் சேவைகளுக்கு பணம் செலுத்துகிறார்கள், மாதாந்திர சந்தா கட்டணத்தை செலுத்துகிறார்கள். நீங்கள் என்பது பொதுவான கருத்து...
Veeam வழங்கும் Coveware இணைய மிரட்டி பணம் பறித்தல் சம்பவத்தின் பதில் சேவைகளை தொடர்ந்து வழங்கும். Coveware தடயவியல் மற்றும் சரிசெய்தல் திறன்களை வழங்கும்…