Dive Deep into the Class in Python

আমরা ইতিমধ্যেই OOP এর বেসিক ধারনা পেয়েছি। আজকে ক্লাস সম্পর্কে বিস্তারিত আলোচনা করবো।
আগেই জেনেছি ক্লাস হচ্ছে একটি নির্দিষ্ট অবজেক্ট এর টেম্পলেট। অর্থাৎ আমরা ক্লাস তৈরি করার মাধ্যমে বলে দিতে পারি অব্জেক্ট এর প্রোপার্টি কি কি হবে , কি কি মেথড থাকবে।
ক্লাস তৈরি করার সিনট্যাক্স হচ্ছে এমনঃ
class class_name:
pass
class
হচ্ছে কী-ওয়ার্ড যার মাধ্যমে পাইথনে class ডিফাইন করতে হয় এবং class_name হচ্ছে ক্লাস এর নাম। তোমাদের ইচ্ছা মতো ক্লাস এর নাম দিতে পারো এবং ক্লাস এর নামের শেষে আমাদেরকে অবশ্যই Semicolon দিতে হবে নইলে Syntaxt error আসবে। যদি কোন লাইনে আমরা Semicolon ইউজ করি তাহলে আমাদেরকে তারপরের লাইনে ৪টি স্পেস দিয়ে লেখা লাগবে। যতগুলো লাইন এভাবে স্পেস দিয়ে লিখবো সেইসব লাইন মিলে একটি কোড ব্লক তৈরি করবে। শেষ লাইনে লিখেছি pass যা দিয়ে বোঝাচ্ছি আমরা আপাদত আর কিছু লিখবো না।
এখন একটি ক্লাস তৈরি করে দেখি আমরাঃ
class Student:
Name = “ Ata Alahy Nishan”
Roll = “01256”
Group = “A”
Department = “Computer Science and Technology”
print(Student.Name) # output: Ata Alahy Nishan
print(Student.Roll) # output: 01256
print(Student.Group) # output: A
print(Student.Department) # output: Ata Alahy Nishan
এখানে classএর অধিনে যতগুলো Variable নিয়েছি সবগুলোকে বলা হচ্ছে প্রোপার্টি। যেহেতু class এর অধিনে এইগুলো লিখেছি তাই এইগুলো হচ্ছে ক্লাস প্রোপার্টি বা Class Attribute
কিন্তু আমরা এমন কিছু চাই যে , আমরা শুধু Student এর নাম , রোল , গ্রুপ , ডিপার্টমেন্ট দিলেই সেটি একটি স্টুডেন্ট অব্জেক্ট তৈরি করে দিবে আমাদেরকে। অর্থাৎ আমরা Name , Roll , Group , Department সহ একজন Student এর যেসব কমন Property থাকে সেগুলোকে Initialize করে দিবো। আর এই Initialize এর কাজ করতে আমাদেরকে ইউজ করতে হবে init method। init এর পূর্ণরূপ হচ্ছে initial । এই init method অব্জেক্ট তৈরি করে। যখন আমরা ক্লাস ডিফাইন করি তখন এটি নিজে নিজেই কল হয়।
এখন আমরা একটি Student class তৈরি করবো। এই Student class এ Property হিসেবে থাকবে name , roll , group , dept , phone , email এবং কয়েকটি মেথড থাকবে name , roll , group , dept , phone ,email এইগুলো পরিবর্তন করার জন্য। কারন একজন Student এর রোল , গ্রুপ , ইমেইল , ফোন , ডিপার্টমেন্ট পরিবর্তন হতে পারে।
class Student:
def init(self,name,roll,group,dept,email,phone):
self.name = name
self.roll = roll
self.group = group
self.dept = dept
self.email = email
self.phone = phone
def studentInfo(self):
return f'Name:{self.name}\nRoll:{self.roll}\nGroup:{self.group}\nDepartment:{self.dept}\nEmail:{self.email}\nPhone:{self.phone}'
def changeName(self,name):
self.name = name
print(‘Success’)
def changeEmail(self.email):
self.email = email
print(‘Success’)
def changePhone(self,phone):
self.phone = phone
print(‘Success’)
def changeGroup(self.group):
self.group = group
print(‘Success’)
def changeDept(self,dept):
self.dept = dept
print(‘Success’)
obj = Student('Nishan',01256,'A','CST',example@gmail.com',01**********)
print(obj.studentInfo())
obj.changeName(‘Nishan’) # output: Success
obj.changeGroup(‘B’) # output: Success
obj.changeDept(ENVT) # output: Success
#Output
Name: Nishan
Roll:853756
Group: A
Department: CST
Email:example@gmail.com
Phone:01*********
উপরোক্ত কোড ব্লকে আমরা অনেকগুলো প্রোপার্টি নিয়েছি সাথে কয়েকটি মেথড নিয়েছি। মেথড এর কয়েকটি প্রকারভেদ রয়েছে
১) ক্লাস মেথড
২) স্পেশাল মেথড
৩)অবজেক্ট মেথড / ইন্সট্যান্স মেথড (অবজেক্ট এর অপর নাম ইন্সট্যান্স)
৪) স্ট্যাটিক মেথড
উপরের ক্লাস এ আমরা যতগুলো মেথড ডিফাইন করেছি সবগুলো অব্জেক্ট মেথড। প্রথম মেথডটি অবজেক্ট মেথড সাথে স্পেশাল মেথড
প্রশ্নঃ কোন মেথড কি সেটা কিভাবে বুঝবো?
→ মেথড নিয়ে বিস্তারিত অন্য কোন আর্টিকেল এ লিখবো। তবে অবজেক্ট মেথড চেনার উপায় হচ্ছে “ **মেথড এর প্রথম Parameter হিসেবে self হবে” । এখন আরেকটি প্রশ্ন জাগতে পারে মনে যে ‘ self কি? ’
About self: self হচ্ছে সেই অবজেক্ট নিজেই। আমরা যখন কোন অবজেক্ট তৈরি করি তখন সেটা কম্পিউটার মেমোরিতে নির্দিষ্ট কোন লোকেশনে স্টোর হয়ে থাকে। সেই লোকেশনের মান হচ্ছে self । আমাদেরকে সবসময় মনে রাখতে হবে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এ আমরা যদি কোন অবজেক্ট নিয়ে কাজ করতে চাই তাহলে সেই অবজেক্ট এর রেফেরেন্সে কাজ করতে হবে। আর অবজেক্ট রেফেরেন্স হচ্ছে self । প্রতিটি অবজেক্ট এর ইউনিক মেমোরি লোকেশন রয়েছে। আমরা যদি আমাদের Student class দিয়ে বানানো obj এর মেমোরি লোকেশন দেখতে চাই তাহলে আমাদেরকে এটি লিখা লাগবে “print(obj)” → এখানে obj হচ্ছে variable এর নাম। অর্থাৎ যে variable এর মধ্যে আমাদের অবজেক্ট তৈরি করেছি। যেহেতু obj variable এর মধ্যে আমাদের প্রথম Student object তৈরি করেছি তাই print() এর মধ্যে obj লিখতে হবে। লিখে কোড run করলে এমন একটি অউটপুট আসবে
→ Output : <__main__.Student object at 0x7c7421939bb0>
**একেকজনের কম্পিউটার এর মান একেক রকম হবে।
অর্থাৎ কম্পিউটার বলছে Student class এর একটি অবজেক্ট মেমোরি তে 0x7c7421939bb0 এই জায়গায় সেভ হয়েছে। আর self এর মানে হচ্ছে এই মেমোরি লোকেশন। আরেকটু এক্সপ্লেইন করা যাক।
আমরা কোডে লিখেছি ঃ
obj = Student('Nishan',01256,'A','CST',example@gmail.com',01**********)
যখন এটি লিখেছি তখন 0x7c7421939bb0 এই মেমোরি লোকেশনে একটি অবজেক্ট স্টোর করা হয়েছে। এরপর আমরা বললাম self.name = name । আমরা একটু আগেই দেখেছি আমাদের মেমোরি লোকেশন টি হচ্ছে 0x7c7421939bb0 । অর্থাৎ self = 0x7c7421939bb0। সুতরাং , 0x7c7421939bb0.name = name । যদি বাংলাতে বলি তাহলে আমরা কম্পিউটার কে বলছি 0x7c7421939bb0 লোকেশনে যে অবজেক্ট তৈরি হয়েছে সেটার নাম হবে আরগুমেন্ট হিসেবে যে নাম দেয়া হয়েছে সেই নামটি। আর এই ক্লাস এর প্রোপার্টি বা মেথড অ্যাক্সেস করতে চাইলে আমাদেরকে অবজেক্ট এর রেফেরেন্স এর মাধ্যমে করতে হবে। অর্থাৎ self থাকা লাগবে।
Subscribe to my newsletter
Read articles from Ata Alahy Nishan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
