আজ আমরা ক্লাস সম্পর্কে কথা বলতে যাচ্ছি। না, আমরা স্কুল ক্লাস মানে না।
প্রোগ্রামিং-এ, ক্লাসের নিজস্ব সংজ্ঞা আছে। একটি ক্লাস একটি বস্তুর জন্য একটি কোডার দ্বারা তৈরি একটি ব্লুপ্রিন্ট। এটি একটি বস্তুতে সংরক্ষণ করা যেতে পারে এমন ডেটা এবং সেই নির্দিষ্ট বস্তুতে সঞ্চালিত পদ্ধতিগুলিকে সংজ্ঞায়িত করে।
পাইথন একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা। এর অর্থ হল এটি বিকাশের একটি প্যাটার্ন ব্যবহার করে যেখানে বস্তু এবং ক্লাসগুলি ডেটা সঞ্চয় করতে ব্যবহৃত হয়।
অবজেক্ট-ওরিয়েন্টেড পদ্ধতি আপনার কোডের পুনরাবৃত্তি কমাতে সাহায্য করে, যা আপনার কোড পড়া এবং বজায় রাখা সহজ করে তোলে। ক্লাস এবং অবজেক্ট অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজ যেমন জাভা, পাইথন এবং C++ এর একটি অংশ।
এই নির্দেশিকায়, আমরা আলোচনা করতে যাচ্ছি যে ক্লাসগুলি কী, তারা কীভাবে কাজ করে এবং কীভাবে আপনি পাইথনে একটি ঘোষণা করতে পারেন। আপনাকে সাহায্য করার জন্য আমরা কয়েকটি উদাহরণ দিয়ে হেঁটে যাব।
ক্লাস কি?
একটি ক্লাস একটি ব্লুপ্রিন্ট যা আপনি একটি বস্তুকে সংজ্ঞায়িত করতে ব্যবহার করেন।
কল্পনা করুন যে আপনি একটি বাড়ির জন্য একটি নীলনকশা দেখছেন। সেই ব্লুপ্রিন্টে দরজা কোথায় যাবে, জানালা কোথায় বসানো হবে ইত্যাদির রূপরেখা দেবে। প্রোগ্রামিং একটি ক্লাস অনুরূপ. একটি শ্রেণী একটি অবজেক্টে সংরক্ষণ করা যেতে পারে এমন ডেটার একটি ব্লুপ্রিন্ট প্রদান করে।
class
ব্যবহার করে ক্লাস সংজ্ঞায়িত করা হয় কীওয়ার্ড প্লেয়ার নামক একটি ক্লাস সংজ্ঞায়িত করে শুরু করা যাক যার দুটি ফাংশন রয়েছে:
81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷
৷গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় কাটিয়েছে।
ক্লাস প্লেয়ার:
""" This is a class for a player """ name = "Luke" def wield_sword(self): print("You have wielded your sword.") def drink_health_potion(self): print("You have consumed a health potion.")
এই ক্লাসটি ভিডিও গেমের একজন খেলোয়াড়কে প্রতিনিধিত্ব করে। এতে বৈশিষ্ট্য এবং পদ্ধতি উভয়ই রয়েছে। অ্যাট্রিবিউটগুলিকে প্রায়শই ইনস্ট্যান্স ভেরিয়েবল বলা হয় যখন তারা একটি ক্লাসের ভিতরে থাকে।
একটি পদ্ধতি আপনাকে একটি তরবারি চালাতে দেয় এবং অন্য পদ্ধতিটি আপনাকে স্বাস্থ্যকর ওষুধ পান করতে দেয়। ক্লাসে একটি ক্লাস ভেরিয়েবল রয়েছে:নাম। এটি আমাদের প্লেয়ারের জন্য ডিফল্ট নাম সংরক্ষণ করে।
লক্ষ্য করুন যে আমরা self
শব্দটি ব্যবহার করছি এই কোডে কয়েকবার। স্ব-ই এটির মতো শোনাচ্ছে:ক্লাসেরই একটি প্রতিনিধিত্ব। সেল্ফের মধ্যে সমস্ত মান রয়েছে যা একটি নির্দিষ্ট শ্রেণীর মধ্যে সংরক্ষিত থাকে, তাই আপনি আপনার পদ্ধতিগুলির মধ্যে সেগুলি অ্যাক্সেস করতে পারেন।
যখন আমরা আমাদের কোড চালাই, কিছুই ঘটে না। কি হচ্ছে? মনে আছে কিভাবে আমরা বলেছিলাম যে একটি ক্লাস একটি নীলনকশা ছিল? যে কারণে কিছুই হচ্ছে না। এটি কার্যকর হওয়ার জন্য আমাদের ব্লুপ্রিন্টের সাথে কিছু করতে হবে।
অবজেক্ট কি?
একটি বস্তু একটি শ্রেণীর একটি একক উদাহরণ। এটি একটি ক্লাস দ্বারা তৈরি ব্লুপ্রিন্ট ব্যবহার করে সংজ্ঞায়িত করা হয়।
আসুন আমাদের গেমে একটি নতুন খেলোয়াড়ের জন্য একটি বস্তু তৈরি করি, লুক:
luke = Player()
আমরা শুধু লুক নামে একটি বস্তু তৈরি করেছি। আমাদের অবজেক্ট এখন আমাদের ক্লাসের মধ্যে সংরক্ষিত সমস্ত ডেটা, সেইসাথে আমাদের ক্লাসের সাথে যুক্ত পদ্ধতিগুলি অ্যাক্সেস করতে পারে:
luke = Player() print(luke.name) luke.wield_sword()
আমাদের কোড ফিরে আসে:
লুক
আপনি আপনার তলোয়ার চালিত করেছেন.
আমাদের কোডে, আমরা name
এর মান প্রিন্ট করেছি আমাদের লুক বস্তুর বৈশিষ্ট্য. একটি ক্লাসে অ্যাট্রিবিউটগুলি অ্যাক্সেস করতে, আপনাকে অবশ্যই ক্লাসের নাম, একটি বিন্দু অনুসরণ করতে হবে, তারপরে আপনি যে ইনস্ট্যান্স অ্যাট্রিবিউটটি অ্যাক্সেস করতে চান তা উল্লেখ করতে হবে। একে প্রায়ই dot notation
বলা হয় .
ডিফল্টরূপে, name
এর মান লুকের জন্য সেট করা হয়েছিল। এক মিনিটের মধ্যে কীভাবে এটি পরিবর্তন করা যায় সে সম্পর্কে আমরা কথা বলব।
আমরা আমাদের wield_sword()
কেও বলেছি ক্লাস যখন আমরা এই ক্লাসে কল করি, তখন wield_sword()
এর বিষয়বস্তু আমাদের প্লেয়ার ক্লাসের ভিতরে পদ্ধতিটি কার্যকর করা হয়েছিল। এর ফলে কনসোলে একটি বার্তা প্রিন্ট করা হয়েছে যাতে বলা হয় ""আপনি আপনার তলোয়ার চালিয়েছেন।"
আপনি একটি ক্লাসের যতগুলি অবজেক্ট চান ততগুলি ঘোষণা করতে পারেন:এই কারণেই ক্লাসগুলি এত শক্তিশালী। আপনি একই পদ্ধতি এবং ডিফল্ট মানগুলি পুনঃব্যবহার করতে পারেন যা একাধিক ভিন্ন বস্তু জুড়ে একটি ক্লাসের মধ্যে সংরক্ষণ করা হয়৷
ক্লাস কনস্ট্রাক্টর
কনস্ট্রাক্টর আপনাকে একটি ক্লাসের ভিতরে ডেটা আরম্ভ করার অনুমতি দেয়। আপনি একটি নির্দিষ্ট শ্রেণীর একটি বস্তু ঘোষণা করার সাথে সাথেই একটি কন্সট্রাক্টর পদ্ধতি কার্যকর করা হয়।
একটি কনস্ট্রাক্টরের নাম হল __init__()
. আপনি আপনার কোডে ডবল আন্ডারস্কোর (__) সহ ফাংশন দেখতে অভ্যস্ত হতে পারেন। এই ফাংশনগুলিকে বিশেষ ফাংশন বলা হয় কারণ তাদের একটি পূর্বনির্ধারিত উদ্দেশ্য রয়েছে। এই ক্ষেত্রে, __init__
এর উদ্দেশ্য আমাদের ক্লাস শুরু করা হয়।
ক্লাসের শীর্ষে এই পদ্ধতিটি অন্তর্ভুক্ত করতে আমরা আগে যে প্লেয়ার ক্লাসটি তৈরি করেছি তা আপডেট করুন:
def __init__(self): print("Your character has been created.")
আপনার ক্লাসে কোনো ভেরিয়েবল বা পদ্ধতি সংজ্ঞায়িত করার আগে এই পদ্ধতিটি অবশ্যই আসতে হবে। আবার আগের থেকে আমাদের মূল কোড রান করা যাক:
luke = Player() print(luke.name) luke.wield_sword()
আমাদের কোড ফিরে আসে:
আপনার চরিত্র তৈরি করা হয়েছে।
লুক
আপনি আপনার তলোয়ার চালিত করেছেন.
আমরা __init__
কল করিনি আমাদের প্রধান প্রোগ্রামে পদ্ধতি কিন্তু এটি যাইহোক দৌড়ে। এর কারণ হল আপনি যখন একটি ক্লাসের একটি অবজেক্ট তৈরি করেন তখন কনস্ট্রাক্টরগুলি স্বয়ংক্রিয়ভাবে কার্যকর হয়।
এর আগে, আমরা name
এর মান নির্ধারণ করেছিলাম আমাদের ক্লাসে পরিবর্তনশীল লুক থেকে। যদিও আমরা আমাদের খেলোয়াড়কে লুক বলতে চাই তবে এটি কার্যকর, খেলোয়াড়দের ভিন্ন নাম থাকলে এটি ব্যবহারিক নয়।
এখানেই কনস্ট্রাক্টররা আসে। আসুন একটি কনস্ট্রাক্টর তৈরি করি যা আমাদের প্লেয়ারের জন্য একটি নাম বরাদ্দ করতে দেয়:
class Player: def __init__(self, name): self.name = name
এই কোডটি আমাদের প্রতিটি প্লেয়ার অবজেক্টে একটি প্যারামিটার পাস করতে দেয়। এই প্যারামিটার প্লেয়ারের নাম প্রতিনিধিত্ব করবে। তারপরে আমরা একটি পদ্ধতি তৈরি করব যা আমাদের খেলোয়াড়ের নাম বলে:
class Player: def __init__(self, name): self.name = name def get_name(self): print("Your name is " + self.name)
আসুন Leah নামের একজন খেলোয়াড়ের জন্য আমাদের প্লেয়ার ক্লাসের একটি নতুন উদাহরণ তৈরি করি:
leah = Player("Leah") leah.get_name()
আমাদের কোড ফিরে আসে:
তোমার নাম লিয়া।
আমরা name
এর মান নির্ধারণ করেছি পরিবর্তনশীল আমাদের অবজেক্ট Leah. এর মানে হল যে আমরা আমাদের ক্লাসে এটিকে যেখানেই উল্লেখ করি না কেন, এর মান লিয়া। আমরা আমাদের ক্লাসের একটি অবজেক্ট তৈরি করার সাথে সাথে কনস্ট্রাক্টরটি কার্যকর করা হয়, তাই আমাদের এটিকে কল করার বিষয়ে চিন্তা করতে হবে না।
আমরা তারপর পদ্ধতিটিকে কল করি get_name()
যা আমাদের প্লেয়ারের সাথে যুক্ত নাম প্রিন্ট করে।
আপনি একটি ক্লাসে যতগুলি প্যারামিটার যোগ করতে চান ততগুলি যোগ করতে পারেন:
class Player: def __init__(self, name, player_type): self.name = name self.player_type = player_type def get_name(self): print("Your name is " + self.name) def get_player_type(self): print(self.name + " is a " + self.player_type + ".")
এই উদাহরণে, আমাদের প্লেয়ার ক্লাস দুটি পরামিতি সমর্থন করে। একটি প্লেয়ারের নাম (নাম) এবং অন্যটি সেই প্লেয়ারের ধরন (player_type
) প্রতিনিধিত্ব করে ) আসুন এই ক্লাসের একটি অবজেক্ট তৈরি করি:
leah = Player("Leah", "Mage") leah.get_name() leah.get_player_type()
আমাদের কোড ফিরে আসে:
তোমার নাম লিয়া।
লিয়া একজন ম্যাজ।
আমরা নির্দিষ্ট করা প্রাথমিক মান দুটিই আমাদের ক্লাসে অ্যাক্সেসযোগ্য।
উপসংহার
ক্লাস আপনাকে আপনার কোডের পুনরাবৃত্তি কমাতে দেয়। একবার আপনি একটি ক্লাস সংজ্ঞায়িত করলে, আপনি যতগুলি চান ততগুলি অবজেক্টকে সংজ্ঞায়িত করতে এর কাঠামো ব্যবহার করতে পারেন। কম পুনরাবৃত্তির ফলে, আপনার কোড পড়া সহজ হওয়া উচিত, এবং তাই বজায় রাখা সহজ।
এখন আপনি একজন বিশেষজ্ঞের মতো আপনার নিজস্ব পাইথন ক্লাস লিখতে শুরু করতে প্রস্তুত!