பைத்தான் இனக்குழுக்கள் மற்றும் பொருள்கள்: ஒரு மதிப்பெண் வினாக்கள், புத்தக வினா விடைகள் மற்றும் குறிப்புகள்
பைத்தானில் பொருள் நோக்கு நிரலாக்கத்தை இனக்குழுக்கள், பொருள்கள் வழியாக இப்பாடம் அறிமுகப்படுத்துகிறது. ஒரு இனக்குழுவை எப்படி வரையறுப்பது, அதிலிருந்து பொருள்களை எப்படி உருவாக்குவது, self அளபுருவுடன் வழிமுறைகளை எப்படி எழுதுவது என்று பார்க்கிறோம். __init__() ஆக்கி, __del__() அழிப்பி ஆகியவற்றின் பயன், இரட்டை அடிக்கோடு முன்னொட்டு மூலம் தரவு உறுப்புகளைப் பொது அல்லது தனிப்பட்டவையாக ஆக்கும் முறை ஆகியவையும் விளக்கப்படுகின்றன.
இந்தப் பாடத்தைப் படியுங்கள்
முந்தைய பொதுத் தேர்வுகளில் கேட்கப்பட்டவை
இந்தப் பாடத்திலிருந்து 8 வினாக்கள் 7 முந்தைய பொதுத் தேர்வுகளில் கேட்கப்பட்டன. விடையையும் விளக்கத்தையும் காண எந்த வினாவையும் திறக்கவும்.
-
மார்ச் 2026
பின்வருவனவற்றுள் எது private இனக்குழு மாறி ?விடையுடன் வினாத்தாளில் பார் →
-
மார்ச் 2025
இனக்குழு உறுப்புகள் எந்த செயற்குறியின் மூலம் அணுகப்படுகிறது?விடையுடன் வினாத்தாளில் பார் →
-
மார்ச் 2024
பைத்தானில் பொருளை உருவாக்கும் செயல்முறை ________ என அழைக்கப்படுகிறது.விடையுடன் வினாத்தாளில் பார் →
-
மார்ச் 2023
__________ உறுப்புகளை இனக்குழுவிற்கு வெளியே இருந்து அணுகமுடியும்.விடையுடன் வினாத்தாளில் பார் →
-
மார்ச் 2023
இனக்குழு உறுப்புகள் __________ செயற்குறியின் மூலம் அணுகப்படுகிறது.விடையுடன் வினாத்தாளில் பார் →
-
மே 2022
பின்வரும் வழிமுறைகளில் எது அழிப்பியாகப் பயன்படுகிறது ?விடையுடன் வினாத்தாளில் பார் →
-
துணைத் தேர்வு 2021
பொருளை உருவாக்கும் செயல்முறை _________ என அழைக்கப்படுகிறது.விடையுடன் வினாத்தாளில் பார் →
-
மார்ச் 2020
இனக்குழு உறுப்புகள் எந்த செயற்குறியின் மூலம் அணுகப்படுகிறது ?விடையுடன் வினாத்தாளில் பார் →
பைத்தான் இனக்குழுக்கள் மற்றும் பொருள்கள் பற்றி
நடுத்தரம் ~90 நிமிடப் படிப்பு
பைத்தான் ஒரு பொருள் நோக்கு நிரலாக்க மொழி. முந்தைய பாடங்களில் மாறிகளையும் செயற்கூறுகளையும் தனித்தனியாக எழுதினீர்கள். இங்கே ஒரு பொருளைப் பற்றிய தரவையும் (எ.கா. ஒரு மாணவரின் பெயர், மதிப்பெண்கள்) அந்தத் தரவின் மீது செயல்படும் செயற்கூறுகளையும் இனக்குழு (Class) என்ற ஒரே அலகில் சேர்த்து வைக்கக் கற்கிறீர்கள்.
கருத்துகள் ஒரு தெளிவான வரிசையில் வருகின்றன. இனக்குழு ஒரு வார்ப்புரு; அதிலுள்ள மாறிகளும் செயற்கூறுகளும் சேர்ந்து இனக்குழு உறுப்புகள் எனப்படும். சான்றுருவாக்கம் (instantiation) மூலம் இனக்குழுவிலிருந்து ஒரு பொருள் (Object) உருவாகிறது. ஒவ்வொரு பொருளும் தனக்கென மதிப்புகளை வைத்திருக்கும். தம்மை அழைத்த பொருளின் தரவை அணுக வழிமுறைகள் self அளபுருவைப் பயன்படுத்துகின்றன. இரண்டு சிறப்பு வழிமுறைகள் தானாக இயங்கும்: பொருள் உருவாகும்போது ஆக்கி (constructor) __init__(), பொருள் அழிக்கப்படும்போது அழிப்பி (destructor) __del__().
ஆக்கியுடன் ஒரு சிறிய இனக்குழுவை எழுதுதல், புள்ளி செயற்குறி மூலம் உறுப்புகளை அணுகுதல், ஒரு வழிமுறையின் முதல் அளபுருவின் பெயரைச் சொல்லுதல், __salary போன்ற தனிப்பட்ட மாறியை இனக்குழுவுக்கு வெளியே அணுகினால் என்ன நடக்கும் என்று கூறுதல் ஆகியவற்றுக்குத் தயாராக இருங்கள். தேர்வுக்கு முன், ஒரு முழுமையான இனக்குழுவையும் பொருளையும் நினைவிலிருந்து ஒருமுறை எழுதிப் பாருங்கள்.
நீங்கள் கற்பவை
- ஒரு இனக்குழுவை வரையறுத்து, அதிலிருந்து பொருள்களை உருவாக்குதல்.
- self ஐ முதல் அளபுருவாகக் கொண்ட வழிமுறைகளை எழுதி, பொருள் வழியாக அவற்றை அழைத்தல்.
- பொருளின் மாறிகளுக்குத் தொடக்க மதிப்புகள் தர __init__() ஆக்கியைப் பயன்படுத்துதல்.
- __del__() அழிப்பி எப்போது இயங்கும் என்று விளக்குதல்.
- பொது மற்றும் தனிப்பட்ட தரவு உறுப்புகளை அறிவித்து, பொது உறுப்புகளைப் புள்ளி செயற்குறி மூலம் அணுகுதல்.
- தனிப்பட்ட உறுப்புகளை இனக்குழுவுக்கு வெளியே அணுகுவதால் வரும் பிழைகளைக் கண்டறிந்து திருத்துதல்.
தொடங்குவதற்கு முன்
- பைத்தான் மாறிகள், செயற்கூறுகள், கட்டுப்பாட்டு அமைப்புகள்.
- அளபுருக்களுடன் செயற்கூறுகளை எழுதுதலும் அழைத்தலும்.
- ஒரு நிரலை மீண்டும் பயன்படுத்தக்கூடிய பகுதிகளாகப் பிரிக்கும் கருத்து.
இந்த அத்தியாயத்தில் உள்ள தலைப்புகள்
பைத்தான் இனக்குழுக்கள் மற்றும் பொருள்கள் — விரிவான விளக்கம்
பைத்தானில் இனக்குழுக்களும் பொருள்களும்
இனக்குழுவும் பொருளும் என்றால் என்ன
பொருள் நோக்கு நிரலாக்கம், ஒரு மாணவர் அல்லது வங்கிக் கணக்கு போன்ற உண்மையான பொருள்களைக் குறிக்கும் பொருள்களைச் சுற்றி நிரலை அமைக்கிறது. ஒரு பொருள் எந்தத் தரவை வைத்திருக்கும், என்ன செய்ய முடியும் என்று சொல்லும் வார்ப்புருவே இனக்குழு. பொருள் என்பது அந்த இனக்குழுவிலிருந்து உருவாக்கப்பட்ட, தனக்கென மதிப்புகள் கொண்ட ஒரு உண்மையான சான்றுரு (instance). ஒரே இனக்குழுவிலிருந்து பல பொருள்களை உருவாக்கலாம்; அவை அனைத்தும் அதன் வழிமுறைகளைப் பகிர்ந்துகொள்கின்றன. பைத்தானில் முழு எண்கள், சரங்கள் போன்ற மதிப்புகள் கூட int, str போன்ற உள்ளிணைந்த இனக்குழுக்களின் பொருள்களே.
இனக்குழுவை வரையறுத்தலும் பொருள்களை உருவாக்குதலும்
இனக்குழு class என்ற சிறப்புச் சொல், இனக்குழுவின் பெயர், ஒரு முக்காற்புள்ளி ஆகியவற்றுடன் வரையறுக்கப்படுகிறது. உள்தள்ளப்பட்ட உடற்பகுதியில் மாறிகளும் செயற்கூறு வரையறைகளும் இருக்கும். எ.கா. class Sample: அதைத் தொடர்ந்து x, y = 10, 20 என்பது இரண்டு மாறிகள் கொண்ட இனக்குழுவை வரையறுக்கிறது. பொருளை உருவாக்குவது சான்றுருவாக்கம் எனப்படும்; இது செயற்கூறு அழைப்பு வடிவில் எழுதப்படும்: S = Sample(). அதன் பிறகு S.x என்பது போலப் புள்ளி செயற்குறி மூலம் உறுப்புகளை அணுகலாம்.
இனக்குழு வழிமுறைகளும் self உம்
இனக்குழுவுக்குள் வரையறுக்கப்படும் செயற்கூறுகள் வழிமுறைகள் (methods) எனப்படும். இத்தகைய ஒவ்வொரு வழிமுறையின் முதல் அளபுருவும் self ஆக இருக்க வேண்டும். அது வழிமுறையை அழைத்த பொருளைக் குறிக்கிறது. எனவே self.x என்பது அந்தக் குறிப்பிட்ட பொருளின் x ஆகும். S.display() என்று அழைக்கும்போது பைத்தான் தானாகவே S ஐ self ஆக அனுப்புகிறது; அழைப்பில் அதை நீங்கள் எழுத வேண்டாம். வழிமுறைக்கு வேறு அளபுருக்கள் இருந்தால், அவற்றை மட்டும் அனுப்புங்கள்.
ஆக்கியும் அழிப்பியும்
ஆக்கி என்பது இருபுறமும் இரண்டு அடிக்கோடுகள் கொண்ட __init__() என்ற சிறப்பு வழிமுறை. பொருள் உருவாக்கப்படும்போது இது தானாக இயங்கும். பொதுவாகப் பொருளின் மாறிகளுக்குத் தொடக்க மதிப்புகளைத் தர இது பயன்படுகிறது, எ.கா. def __init__(self, num): self.num = num, இதை S = Sample(10) என்று அழைக்கிறோம். அழிப்பி என்பது __del__(). பொருள் அழிக்கப்படப் போகும்போது, அதாவது அதைக் குறிக்கும் எந்தச் சுட்டும் மீதம் இல்லாதபோது, இது தானாக இயங்கும். எ.கா. அதைக் குறிக்கும் ஒரே பெயரை del S நீக்கிய பிறகு. இது தூய்மைப்படுத்தும் (clean-up) வேலைகளுக்குப் பயன்படுகிறது.
பொது மற்றும் தனிப்பட்ட தரவு உறுப்புகள்
பைத்தானில் public, private போன்ற சிறப்புச் சொற்கள் இல்லை. இயல்பாக, இனக்குழுவின் ஒவ்வொரு மாறியும் வழிமுறையும் பொதுவானவை (public); புள்ளி செயற்குறி மூலம் இனக்குழுவுக்கு வெளியிலிருந்தும் அணுகலாம். __n2 போல இரண்டு அடிக்கோடுகளில் தொடங்கும் பெயர் தனிப்பட்டது (private). இனக்குழுவுக்குள் அதை self.__n2 என்று வழக்கம்போலப் பயன்படுத்தலாம். ஆனால் இனக்குழுவுக்கு வெளியே S.__n2 என்று எழுதினால் AttributeError வரும். பைத்தான் அந்த மாறிக்கு உள்ளே வேறு பெயர் சூட்டுவதன் மூலம் இதைச் செய்கிறது. எனவே தனிப்பட்ட தரவு முழுமையாகப் பூட்டப்படுவதில்லை; தவறுதலாகப் பயன்படுத்தப்படாமல் மட்டும் பாதுகாக்கப்படுகிறது.
தவிர்க்க வேண்டிய பொதுவான தவறுகள்
- வழிமுறையின் முதல் அளபுருவாக self ஐ விட்டுவிடுவது. பைத்தான் பொருளை அப்போதும் அனுப்புவதால், அந்த வழிமுறையைப் பொருள் வழியாக அழைக்கும்போது TypeError வரும்.
- S.__n2 போன்ற தனிப்பட்ட மாறியை இனக்குழுவுக்கு வெளியே அணுகுவது. அதற்குப் பதிலாக இனக்குழுவின் ஒரு வழிமுறை மூலம் அதைப் படியுங்கள் அல்லது மாற்றுங்கள்.
- __init__ க்குப் பதிலாக _init_ அல்லது init என்று எழுதுவது. ஒரே அடிக்கோடு இருந்தாலோ அடிக்கோடே இல்லாவிட்டாலோ பைத்தான் அதை ஆக்கியாகக் கருதாது; அது தானாக இயங்காது.
- S.display(S) என்பது போல அழைப்பில் self க்கு ஒரு மதிப்பை அனுப்புவது. பைத்தான் self ஐத் தானே தருகிறது; மற்ற அளபுருக்களை மட்டும் அனுப்புங்கள்.
- class அல்லது def போன்ற பைத்தான் சிறப்புச் சொல்லை இனக்குழு அல்லது வழிமுறையின் பெயராகப் பயன்படுத்துவது; இது SyntaxError தரும்.
இவற்றை பயிற்சித் தேர்வு மூலம் சோதித்துப் பாருங்கள்; பிறகு விடையுடன் கூடிய வினாக்கள் பகுதியில் விரிவான விளக்கத்தைப் படியுங்கள்.
அடிக்கடி கேட்கப்படும் கேள்விகள்
இனக்குழுவுக்கும் பொருளுக்கும் உள்ள வேறுபாடு என்ன?
இனக்குழு என்பது மாறிகளையும் வழிமுறைகளையும் பட்டியலிடும் வார்ப்புரு. பொருள் என்பது அதிலிருந்து உருவாக்கப்பட்ட, உண்மையான மதிப்புகளைக் கொண்ட ஒரு சான்றுரு. class Student இலிருந்து s1, s2 என்ற பொருள்களை உருவாக்கலாம்; ஒவ்வொன்றுக்கும் தனிப் பெயரும் மதிப்பெண்ணும் இருக்கும், ஆனால் வழிமுறைகள் ஒன்றே.
வழிமுறைகளில் self அளபுரு ஏன் தேவை?
ஒரு வழிமுறையை இனக்குழுவின் எல்லாப் பொருள்களும் பகிர்ந்துகொள்கின்றன. எனவே எந்தப் பொருள் அதை அழைத்தது என்று அதற்குத் தெரிய வேண்டும். self அந்தப் பொருளைக் குறிக்கிறது; இதனால் வழிமுறை self.marks போன்ற அந்தப் பொருளின் மாறிகளைப் பயன்படுத்த முடிகிறது. அழைக்கும் பொருளைப் பைத்தான் தானாக self ஆக அனுப்புவதால், அழைப்பில் அதை எழுத வேண்டாம்.
__init__() என்ன செய்கிறது?
__init__() தான் ஆக்கி. ஒவ்வொரு முறை பொருள் உருவாக்கப்படும்போதும் இது தானாக இயங்கி, பொருளின் தொடக்க மதிப்புகளை அமைக்கிறது. எ.கா. def __init__(self, name): self.name = name என்று இருந்தால், s1 = Student("Anbu") என்ற கூற்று Anbu என்ற பெயருள்ள ஒரு பொருளை உருவாக்கும்.
பைத்தான் இனக்குழுவில் ஒரு மாறியைத் தனிப்பட்டதாக்குவது எப்படி?
அதன் பெயரை __salary என்பது போல இரண்டு அடிக்கோடுகளில் தொடங்குங்கள். இனக்குழுவின் வழிமுறைகள் அதை self.__salary என்று பயன்படுத்தலாம். ஆனால் வெளியிலிருந்து obj.__salary என்று அணுகினால் AttributeError வரும். பைத்தான் இத்தகைய மாறிகளுக்கு உள்ளே வேறு பெயர் சூட்டுகிறது; இதனால் இனக்குழுவுக்கு வெளியே அவை தவறுதலாகப் பயன்படுத்தப்படுவதில்லை.
அழிப்பி என்றால் என்ன, அது எப்போது இயங்கும்?
அழிப்பி என்பது __del__() என்ற சிறப்பு வழிமுறை. பொருள் அழிக்கப்படப் போகும்போது இது தானாக இயங்கும். அதைக் குறிக்கும் மாறி எதுவும் இல்லாதபோது இது நடக்கும்; எ.கா. del அதன் ஒரே சுட்டை நீக்கிய பிறகு, அல்லது நிரல் முடியும்போது. தூய்மைப்படுத்தும் வேலைகளுக்கு இது பயன்படுகிறது.
ஆக்கி அளபுருக்களை ஏற்குமா?
ஆம். self க்குப் பிறகு __init__() எத்தனை அளபுருக்களையும் கொண்டிருக்கலாம். S = Sample(10, 20) என்பது போலப் பொருளை உருவாக்கும்போதே மதிப்புகள் தரப்படும். பொதுவாக ஆக்கிக்குள் அவை பொருளின் மாறிகளில் சேமிக்கப்படும்.
பைத்தானில் இனக்குழு உறுப்புகள் இயல்பாகப் பொதுவானவையா?
ஆம். பெயர் இரண்டு அடிக்கோடுகளில் தொடங்காதவரை, பைத்தான் இனக்குழுவின் ஒவ்வொரு மாறியும் வழிமுறையும் பொதுவானவை. எனவே ஒரு பொருளும் புள்ளி செயற்குறியும் கொண்டு வெளியிலிருந்து அவற்றை அணுகலாம். மாறாக, C++ இல் இனக்குழு உறுப்புகள் இயல்பாகத் தனிப்பட்டவை.
கடைசியாகப் புதுப்பிக்கப்பட்டது 17 செப்டெம்பர் 2026