কম্পিউটার টিউটোরিয়াল

পাইথনে অ্যাবস্ট্রাক্ট বেস ক্লাস (abc মডিউল)


এক বা একাধিক অ্যাবস্ট্রাক্ট মেথড থাকলে ক্লাসকে অ্যাবস্ট্রাক্ট ক্লাস বলা হয়। অ্যাবস্ট্রাক্ট মেথড হলো এমন একটি মেথড যা ঘোষণা করা হয়েছে কিন্তু কোনো ইমপ্লিমেন্টেশন নেই। অ্যাবস্ট্রাক্ট ক্লাস ইনস্ট্যানশিয়েট করা যায় না, এবং এর অ্যাবস্ট্রাক্ট মেথডগুলো সাবক্লাসে অবশ্যই ইমপ্লিমেন্ট করতে হয়।

অ্যাবস্ট্রাক্ট বেস ক্লাস ইন্টারফেস ডিফাইন করার একটি উপায় প্রদান করে যখন hasattr() ব্যবহার করা ক্লান্তিকর বা সূক্ষ্মভাবে ভুল হবে (উদাহরণস্বরূপ ম্যাজিক মেথডের সাথে)। ABC-গুলো ভার্চুয়াল সাবক্লাস ভাবনা পরিচয় করিয়েছে, যেগুলো একটি ক্লাস থেকে ইনহেরিট না করলেও isinstance() এবং issubclass() ফাংশন দ্বারা স্বীকৃত হয়। পাইথনে অনেক বিল্ট-ইন ABC রয়েছে। Iterator, Generator, Set, Mapping ইত্যাদি ডেটা স্ট্রাকচার সংক্রান্ত ABC-গুলো collections.abc মডিউলে সংজ্ঞায়িত। numbers মডিউল সংখ্যাত্মক টাওয়ার ডিফাইন করে যা সংখ্যাত্মক ডেটা টাইপের বেস ক্লাসের সংগ্রহ। পাইথন লাইব্রেরির 'abc' মডিউল কাস্টম অ্যাবস্ট্রাক্ট বেস ক্লাস ডিফাইন করার কাঠামো প্রদান করে।

'abc' বেস ক্লাসের মেথডগুলোর আগে @abstractmethod ডেকোরেটর ব্যবহার করে সেগুলোকে অ্যাবস্ট্রাক্ট হিসেবে চিহ্নিত করে। এরপর একটি কনক্রিট ক্লাস যা এসব অ্যাবস্ট্রাক্ট বেস ক্লাসের সাবক্লাস, অ্যাবস্ট্রাক্ট মেথডগুলো ওভাররাইড করে ইমপ্লিমেন্ট করে।

abc মডিউল ABCMeta ক্লাস ডিফাইন করে যা অ্যাবস্ট্রাক্ট বেস ক্লাস ডিফাইন করার জন্য একটি মেটাক্লাস। নিচের উদাহরণে Shape ক্লাসকে ABCMeta ব্যবহার করে অ্যাবস্ট্রাক্ট বেস ক্লাস হিসেবে ডিফাইন করা হয়েছে। Shape ক্লাসের area() মেথডটি abstractmethod দ্বারা ডেকোরেট করা হয়েছে।

এখন Rectangle ক্লাস Shape কে পেরেন্ট হিসেবে ব্যবহার করে অ্যাবস্ট্রাক্ট area() মেথড ইমপ্লিমেন্ট করে। যেহেতু এটি একটি কনক্রিট ক্লাস, তাই এটি ইনস্ট্যানশিয়েট করা যায় এবং ইমপ্লিমেন্ট করা area() মেথড কল করা যায়।

import abc class Shape(metaclass=abc.ABCMeta): @abc.abstractmethod def area(self): pass class Rectangle(Shape): def __init__(self, x, y): self.l = x self.b = y def area(self): return self.l * self.b r = Rectangle(10, 20) print('area: ', r.area())

দ্রষ্টব্য: অ্যাবস্ট্রাক্ট বেস ক্লাসে একাধিক অ্যাবস্ট্রাক্ট মেথড থাকতে পারে। চাইল্ড ক্লাস অবশ্যই সকল ইমপ্লিমেন্ট করতে হবে, না হলে TypeError উত্থাপিত হবে।

abc মডিউল ABC হেল্পার ক্লাসও ডিফাইন করে যা ABCMeta ক্লাসের বিকল্প হিসেবে অ্যাবস্ট্রাক্ট বেস ক্লাস ডিফাইন করতে ব্যবহার করা যায়।

class Shape(abc.ABC): @abc.abstractmethod def area(self): pass

অ্যাবস্ট্রাক্ট বেস ক্লাস থেকে সাবক্লাসিং না করে, রেজিস্টার ক্লাস ডেকোরেটর দিয়ে এটি অ্যাবস্ট্রাক্ট বেস হিসেবে রেজিস্টার করা যায়।

class Shape(abc.ABC): @abc.abstractmethod def area(self): pass @Shape.register class Rectangle(): def __init__(self, x, y): self.l = x self.b = y def area(self): return self.l * self.b

অ্যাবস্ট্রাক্ট বেস ক্লাসে @abstractclassmethod এবং @abstractstaticmethod ডেকোরেটর ব্যবহার করে ক্লাস মেথড এবং স্ট্যাটিক মেথডও দেওয়া যায়।


  1. পাইথনে মেটাক্লাস কী?

  2. পাইথনে বেস ওভারলোডিং মেথডগুলো কী কী?

  3. পাইথনে ক্লাস এবং ইনহেরিটেন্সের পরিচিতি

  4. পাইথনে ক্লাস কীভাবে ডিফাইন করবেন?