অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ধারণা প্রোগামিং ল্যাঙ্গুয়েজের একটি গুরুত্বপূর্ণ প্রোগ্রামিং পারাডাইম (programming paradigm) পাইথনের সমস্ত কিছুই এক একটি অবজেক্ট। কোড পুনঃব্যবহারের জন্য অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর কোন জুড়ি নেই। এক্ষেত্রে class হচ্ছে মৌলিক গাঠনিক একক।
Class
class কোন একটা object এর ছাঁচ হিসেবে কাজ করে। ইটের ভাটায় যেমন ইট তৈরির একটা ছাঁচ তৈরি করা হয় এবং সেই ছাঁচের মাপে অসংখ্য ইট তৈরি করা হয়, ঠিক তেমনই প্রোগ্রামিং এও একটি class এর আদলে অসংখ্য object তৈরি করা যায়। এখন পাইথনে কিভাবে একটি class তৈর করা যায় সেটা দেখে নেব।
# This is an example of a class in Python
class TestClass:
name="Python"
classObject=TestClass() # creating an object
print(classObject.name) # Accessing a class variable
ফলাফল-
Python
এখানে TestClass নামে একটি class তৈরি করা হয়েছে। অর্থাৎ ক্লাসের গঠন হচ্ছে class কিওয়ার্ড দিয়ে শুরু হবে তারপর ফাংশনের নাম থাকবে এবং সেমিকোলন দিয়ে class এর উপাদানগুলোকে লিখতে হবে। এখানে শুধুমাত্র একটা ভেরিয়েবল name ব্যবহার করা হয়েছে।
৫ম লাইনে class এর একটি অবজেক্ট তৈরি করা হয়েছে। এখানে classObject হচ্ছে TestClass এর একটি অবজেক্ট।
৭ম লাইনে class এর অবজেক্ট দিয়ে name ভেরিয়েবল access করা হয়েছে। পাইথনে ক্লাস ভেরিয়েবল access করার জন্য ডট অপারেটর (.) ব্যবহার করা হয়।
ক্লাসের ইনস্ট্যান্স (instance of a class)
একটু আগে যে প্রোগ্রামটা দেখলাম সেটা খুবই সাধারণ এবং এর ব্যবহারিক কোন প্রয়োগ নেই বললেই চলে। এখন আমরা একটু গভীরে যাওয়ার চেষ্টা করব। প্রথমেই একটা উদাহরণ দিয়ে শুরু করি-
# This is an example of a class in Python
class MathClass:
def __init__(self,x,y):
self.x=x
self.y=y
def Multiply_function(self):
z=self.x*self.y
return z
firstObject=MathClass(5,10) # creating an object
secondObject=MathClass(2,4) # creating an object
print(firstObject.Multiply_function()) # Accessing a class function
print(secondObject.Multiply_function()) # Accessing a class function
ফলাফল-
50
8
এখানে ২য় লাইনে MathClass নামে একটি ক্লাস ডিফাইন করা হয়েছে। ৬ষ্ঠ লাইনে multiply_function নামে একটি ফাংশন ডিক্লেয়ার করা হয়েছে যেটা আগের মতই শুধু প্যারামিটার হিসেবে self ব্যবহার করা হয়ছে। এই self কিওয়ার্ডটি একই ক্লাস নির্দেশ করতে ব্যবহার করা হয়।
__init__ ফাংশন
এখন প্রশ্ন হচ্ছে, __init__ ফাংশনটা কি এবং কেন ব্যবহার করা হয়েছে। _init_ ফাংশনটি প্রতিটি ক্লাসের একটি ডিফল্ট (default) ফাংশন। মূলত এটি কোন অবজেক্টকে ইনিশিয়েট (initiate) করতে ব্যবহার করা হয়। যখন কোন অবজেক্ট তৈরি হয় তখন প্রথমেই এই ফাংশনটি কল হয় এবং একটা ইনস্ট্যান্স তৈরি করে, একেই ক্লাসের ইনস্ট্যান্স বলে। এটাকে কনস্ট্রাকটর (constructor) ও বলা হয়।
উপরের প্রোগ্রামটিতে ১০ম এবং ১১শ লাইনে দুইটি অবজেক্ট ইনিশিয়েট করা হয়েছে। একটু লক্ষ্য করলেই দেখতে পাবেন যে ক্লাসের ভিতর দুইটি ভ্যালু পাঠানো হয়েছে, এই ভ্যালু দুটি দিয়েই ক্লাসটি ইনিশিয়েট করা হয়েছে।
উল্লেখ্য দুটি ক্ষেত্রেই একই ভেরিয়েবল x এবং y ব্যবহার করা হয়েছে, কিন্তু দুটি অবজেক্ট এর ক্ষেত্রেই এই ভ্যালু আলাদা। অর্থাৎ ক্লাস একটি ছাঁচ হিসেবে কাজ করছে এবং সেই ছাঁচের আদলে বিভিন্ন অবজেক্ট তৈরি হচ্ছে। বিষয়টি আরো ভালভাবে বোঝার জন্য নিচের উদাহরণটি দেখে নেই-
# This is an example of class in Python
class MathClass:
def __init__(self,x,y):
self.x=x
self.y=y
def Multiply_function(self):
z=self.x*self.y
return z
firstObject=MathClass(5,10) # creating an object
secondObject=MathClass(2,4) # creating an object
print(firstObject.x) # Accessing a class variable
print(secondObject.x) # Accessing a class variable
ফলাফল-
5
2
এখানে পরিষ্কারভাবে বোঝা যাচ্ছে যে, ক্লাসের ভেরিয়েবল (ছাঁচ) একই হলেও অবজেক্ট (পণ্য) অনুসারে এর উপাদান ভিন্ন।
অবজেক্ট প্রপার্টিকে মডিফাই করা (Modifying an object property)
কোন একটি অবজেক্টের প্রপার্টি মডিফাই বা পরিবর্তন করতে উপরের মত একই পদ্ধতিতে ডট অপারেটরের মাধ্যমে পরিবর্তন করা হয়। উদাহরণস্বরুপ-
# This is an example of a class in Python
class MathClass:
def __init__(self,x,y):
self.x=x
self.y=y
def Multiply_function(self):
z=self.x*self.y
return z
firstObject=MathClass(5,10) # creating an object
print(firstObject.Multiply_function()) # Accessing a class function
firstObject.x=15 #Modifying the class property
print(firstObject.Multiply_function()) # Accessing a class function after modifying the class property
ফলাফল-
50
150
১২ তম এবং ১৬ তম লাইনে সাধারণভাবেই ফাংশন কল করা হয়েছে, কিন্তু ১৪ তম লাইনে ভ্যালু পরিবর্তন করার কারণে ফলাফল ভিন্ন এসেছে।
অবজেক্ট প্রপার্টিকে ডিলিট করা (Deleting an object property)
কোন একটি অবজেক্ট প্রপার্টিকে ডিলিট করার জন্য del কিওয়ার্ড ব্যবহার করা হয়। একটা উদাহরণ দেখে নিই-
# This is an example of a class in Python
class MathClass:
def __init__(self,x,y):
self.x=x
self.y=y
def Multiply_function(self):
z=self.x*self.y
return z
firstObject=MathClass(5,10) # creating an object
print(firstObject.x) # Accessing a class property
del firstObject.x # Delete the class property
print(firstObject.x) # Accessing a class property after modifying the class property
ফলাফল-
5
Traceback (most recent call last):
File "main.py", line 24, in <module>
print(firstObject.x) # Accessing a class function after modifying the class property
AttributeError: 'MathClass' object has no attribute 'x'
ফলাফলের দিকে লক্ষ্য করব যে এখানে 5 এসেছে এবং পরক্ষণেই একটা এরর এসেছে। অর্থাৎ প্রথম ফলাফলটা সঠিক এসেছে ১৪ তম লাইনে ডিলিট করার আগে, পরে যেয়ে যখনই ১৬ তম লাইনে x এর ভ্যাল্য প্রিন্ট করা হয়েছে তখনই এররটা এসেছে; কারণ যে প্রপার্টির কোন অস্ত্বিত্তই নেই সেটা ডিলিট করার তো কোন প্রশ্নই আসেনা।
কোন অবজেক্টকে ডিলিট করা (Deleting an Object)
এতক্ষণে আমরা বিভিন্ন প্রপার্টিকে ডিলিট করা দেখে এসেছি, এখন দেখব কিভাবে সম্পূর্ণ একটা অবজেক্টকেই ডিলিট করা যায়। একটা উদাহরণ দেখে নেই-
# This is an example of a class in Python
class MathClass:
def __init__(self,x,y):
self.x=x
self.y=y
def Multiply_function(self):
z=self.x*self.y
return z
firstObject=MathClass(5,10) # creating an object
print(firstObject.x) # Accessing a class function
del firstObject # Deleting the class
print(firstObject.x) # Accessing a class variable after deleting the class property
ফলাফল-
5
Traceback (most recent call last):
File "main.py", line 24, in <module>
print(firstObject.x) # Accessing a class variable after deleting the class property
NameError: name 'FirstObject' is not defined
ফলাফলে 5 এসেছে অবজেক্টটি ডিলিট করার আগে, ডিলিট করার পর আমরা একটা এরর পেয়েছি – NameError: name ‘firstObject’ is not defined অর্থাৎ এই নামে কোন অবজেক্ট নেই।
পাইথনে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং Full Video Ta Thakla aro valo hobe
ধন্যবাদ। ভিডিও করার ইচ্ছা আছে কিন্তু এখনো শুরু করা হয়নি 🙂