এই টিউটোরিয়ালে, আমরা ব্যক্তিগত ভেরিয়েবল সম্পর্কে শিখতে যাচ্ছি পাইথন ক্লাসে .
পাইথনে প্রাইভেট ভেরিয়েবল নামক ধারণা নেই . কিন্তু, পাইথন ডেভেলপারদের অধিকাংশই একটি নামকরণের নিয়ম অনুসরণ করে বলে যে একটি ভেরিয়েবল সর্বজনীন নয় এবং এটি ব্যক্তিগত।
আমাদের একটি ডাবল আন্ডারস্কোর দিয়ে একটি পরিবর্তনশীল নাম শুরু করতে হবে এটিকে একটি ব্যক্তিগত পরিবর্তনশীল হিসাবে উপস্থাপন করতে (আসলেই নয়)। উদাহরণ:- এক, দুই, ইত্যাদি ..,.
আমরা আগেই বলেছি যে ভেরিয়েবলের নাম ডাবল আন্ডারস্কোর দিয়ে শুরু হয় সেগুলি ব্যক্তিগত নয়৷ আমরা এখনও অ্যাক্সেস করতে পারি৷ চলুন দেখি কিভাবে প্রাইভেট টাইপ ভেরিয়েবল তৈরি করা যায় এবং তারপর আমরা দেখব কিভাবে সেগুলি অ্যাক্সেস করা যায়।
# একটি ক্লাসক্লাস নমুনা তৈরি করা:def __init__(self, nv, pv):# স্বাভাবিক পরিবর্তনশীল self.nv =nv # প্রাইভেট ভেরিয়েবল (আসলেই নয়) self.__pv =pv# ক্লাসের একটি উদাহরণ তৈরি করা নমুনা নমুনা =নমুনা( 'সাধারণ পরিবর্তনশীল', 'ব্যক্তিগত পরিবর্তনশীল')
আমরা একটি ক্লাস এবং তার উদাহরণ তৈরি করেছি। আমাদের দুটি ভেরিয়েবল আছে একটি স্বাভাবিক এবং অন্যটি __init__ পদ্ধতিতে ব্যক্তিগত। এখন, ভেরিয়েবল অ্যাক্সেস করার চেষ্টা করুন. এবং দেখুন কি হয়।
উদাহরণ
# একটি ক্লাসক্লাস নমুনা তৈরি করা:def __init__(self, nv, pv):# স্বাভাবিক পরিবর্তনশীল self.nv =nv # প্রাইভেট ভেরিয়েবল (আসলেই নয়) self.__pv =pv# ক্লাসের একটি উদাহরণ তৈরি করা নমুনা নমুনা =নমুনা( 'সাধারণ পরিবর্তনশীল', 'প্রাইভেট ভেরিয়েবল')# অ্যাক্সেস করা হচ্ছে *nv*print(sample.nv)# অ্যাক্সেস করা হচ্ছে *__pv**print(sample.__pv)
আউটপুট
আপনি যদি উপরের কোডটি চালান, তাহলে আপনি নিম্নলিখিত আউটপুট পাবেন।
<পূর্ব>সাধারণ পরিবর্তনশীল-------------------------------------------- ------------------------------AttributeError Traceback (সর্বশেষ সর্বশেষ কল)প্রোগ্রামটি কোনো ত্রুটি ছাড়াই nv ভেরিয়েবল প্রদর্শন করেছে। কিন্তু আমরা AttributeError পেয়েছি যখন আমরা __pv অ্যাক্সেস করার চেষ্টা করি পরিবর্তনশীল।
কেন আমরা এই ত্রুটি পেতে পারি? কারণ ভেরিয়েবল নামের কোনো অ্যাট্রিবিউট নেই __pv . তাহলে self.__pv =pv সম্পর্কে কি init পদ্ধতিতে বিবৃতি? আমরা এই বিষয়ে একটু আলোচনা করব। প্রথমে দেখা যাক কিভাবে __pv অ্যাক্সেস করতে হয় পরিবর্তনশীল।
আমরা যে কোনো ক্লাস ভেরিয়েবল অ্যাক্সেস করতে পারি যার নাম ডাবল আন্ডারস্কোর দিয়ে শুরু হয় _className\_variableName_ হিসাবে . সুতরাং, বা উদাহরণে এটি হল_Sample\_pv__ . এখন, _Sample\_pv_ ব্যবহার করে এটি অ্যাক্সেস করুন নাম৷
৷উদাহরণ
# একটি ক্লাসক্লাস নমুনা তৈরি করা:def __init__(self, nv, pv):# স্বাভাবিক পরিবর্তনশীল self.nv =nv # প্রাইভেট ভেরিয়েবল (আসলেই নয়) self.__pv =pv# ক্লাসের একটি উদাহরণ তৈরি করা নমুনা নমুনা =নমুনা( 'সাধারণ ভেরিয়েবল', 'প্রাইভেট ভেরিয়েবল')# অ্যাক্সেস করা *nv*print(sample.nv)# অ্যাক্সেস করা *__pv** ব্যবহার করে _Sample__pv nameprint(sample._Sample__pv)
আউটপুট
আপনি যদি উপরের কোডটি চালান, তাহলে আপনি নিম্নলিখিত ফলাফল পাবেন।
সাধারণ পরিবর্তনশীলপ্রাইভেট পরিবর্তনশীল
ভেরিয়েবলের নাম কেন __pv পরিবর্তিত হয়েছে?
পাইথনে, নাম ম্যাংলিং নামে একটি ধারণা রয়েছে। পাইথন ভেরিয়েবলের নাম পরিবর্তন করে যা একটি ডাবল আন্ডারস্কোর দিয়ে শুরু হয় . সুতরাং, যে কোনো ক্লাস ভেরিয়েবল যার নাম ডাবল আন্ডারস্কোর দিয়ে শুরু হয় সেটি _className\_variableName_ ফর্মে পরিবর্তিত হবে .
সুতরাং, ধারণাটি ক্লাসের পদ্ধতিগুলির জন্যও প্রযোজ্য হবে। আপনি নিম্নলিখিত কোড দিয়ে এটি দেখতে পারেন।
উদাহরণ
শ্রেণীর নমুনা:def __init__(self, a):self.a =a # ব্যক্তিগত পদ্ধতি(আসলেই নয়) def __get_a(self):return self.a# ক্লাসের একটি উদাহরণ তৈরি করা নমুনা =নমুনা(5)# আহ্বান করা সঠিক নেমপ্রিন্ট সহ পদ্ধতিআউটপুট
আপনি যদি উপরের কোডটি চালান, তাহলে আপনি নিম্নলিখিত ফলাফল পাবেন।
<প্রে>5------------------------------- -----------------------------AttributeError Traceback (সর্বশেষ সর্বশেষ কল)এ 14 15 # ভুল নাম দিয়ে পদ্ধতিটি চালু করা---> 16 প্রিন্ট(নমুনা.__get_a())AttributeError:'Sample' অবজেক্টের কোনো অ্যাট্রিবিউট নেই '__get_a'
উপসংহার
একটি ডাবল আন্ডারস্কোর ব্যবহার করার উদ্দেশ্য পরিবর্তনশীল বা পদ্ধতি অ্যাক্সেস থেকে সীমাবদ্ধ করা হয় না. এটা বলার আছে যে নির্দিষ্ট পরিবর্তনশীল বা পদ্ধতি শুধুমাত্র ক্লাসের ভিতরে আবদ্ধ করা বোঝায়। টিউটোরিয়ালে আপনার কোন প্রশ্ন থাকলে মন্তব্য বিভাগে উল্লেখ করুন।