Self কীওয়ার্ড

পাইথন OOP তে self একটি বিশেষ ভ্যারিয়েবল। এটি একই অবজেক্টকে নির্দেশ করে। self কীওয়ার্ড ব্যবহার করে আপনি একটি ক্লাসের প্রোপার্টি এবং মেথডসমুহকে ঐ ক্লাসের মধ্য থেকেই অ্যাক্সেস করতে পারবেন।

self, পাইথন ক্লাসের ফাংশন ডিক্লেয়ারেশন এর সময়ে অনেকেই এই self শব্দের সাথে পরিচিত হয়েছেন। স্বাভাবিক ভাবেই প্রশ্ন জাগতে পারে যে প্রতিটি ফাংশনেই আমরা যত গুলো প্যারামিটার ই ব্যবহার করি না কেন… এই self প্যারামিটার সবসময় বেশি থাকে এবং এই প্যারামিটার প্রকৃত পক্ষে অবজেক্টকে নির্দেশ করে।

প্রথমে একটি ক্লাস ডিক্লেয়ার করা যাক…

class Student :
   name=''
   roll = ''
   def admission():
    print('Admitted')

এখন আমরা এই ক্লাসের অ্যাট্রিবিউট গুলো ব্যবহার করার চেষ্টা করি।

আমরা এখনো এই ক্লাসের কোন অবজেক্ট তৈরি করি নি। এবার দেখা যাক আমরা একটা অবজেক্ট তৈরি করলে কি হয়।

class Student :
   name='olee'
   roll = 25
   def admission():
    print('Admitted')
    
student = Student()  
print(student.name,student.roll ) 
#=== Output ===
olee 25

এবার আমরা admission মেথডকে এক্সেস নেয়ার চেষ্টা করি।

class Student :
   name='olee'
   roll = 25
   def admission():
    print('Admitted')

student = Student()  
student.admission()

আউটপুট হিসাবে আমরা একটি এরর মেসেজ পাবো

TypeError: Student.admission() takes 0 positional arguments but 1 was given

এখন প্রশ্ন হচ্ছে এই আর্গুমেন্ট আসল কোথা থেকে আমরা তো কোন আর্গুমেন্টই পাঠাই নি।

আসলে আমরা যখন কোন ক্লাসের অবজেক্ট দিয়ে কোন মেথড কে কল করি তখন সেই মেথডের ফার্স্ট আর্গুমেন্ট হিসেবে সেই অবজেক্ট টি পাঠানো হয়। এখন আমাদের কি করা উচিত! একটি প্যারামিটার দিয়ে দিতে হবে। আপনি চাইলে যে কোন কিছুই দিতে পারেন। তবে পাইথনে স্ট্যান্ডার্ড হিসেবে self ব্যবহার করা হয়। মানে “self is merely a convention. It is not a keyword and has no special meaning in Python.”

কেন ব্যবহার করা হয় self ?

পাইথন ক্লাসের কোন ফাংশন যখন কোন অবজেক্ট দ্বারা কল করা হয় তখন সেটি মেথড হয়ে যায়। এখানে ফাংশন এবং মেথড তফাৎ টা হচ্ছে মেথড ফাংশনের চাইতে একটি আর্গুমেন্ট বেশি নেয় এবং সেটি হচ্ছে সেই অবজেক্ট।

তাহলে আমরা এটা যাচাই করি

class Student :
   name='olee'
   roll = 25
   def admission(self):
    print('Admitted')

student = Student() 
print(type(Student.admission))
print(type(student.admission)) 
#=== Output ===
<class 'function'>
<class 'method'>

Last updated