একটি ক্লাসকে বিমূর্ত শ্রেণী বলা হয় যদি এতে এক বা একাধিক বিমূর্ত পদ্ধতি থাকে। একটি বিমূর্ত পদ্ধতি হল একটি পদ্ধতি যা ঘোষণা করা হয়, কিন্তু কোন বাস্তবায়ন নেই। বিমূর্ত শ্রেণীগুলি তাত্ক্ষণিক নাও হতে পারে, এবং এর বিমূর্ত পদ্ধতিগুলি অবশ্যই এর উপশ্রেণী দ্বারা প্রয়োগ করা উচিত৷
বিমূর্ত বেস ক্লাসগুলি ইন্টারফেসগুলিকে সংজ্ঞায়িত করার একটি উপায় প্রদান করে যখন hasattr() এর মতো অন্যান্য কৌশলগুলি আনাড়ি বা সূক্ষ্মভাবে ভুল হবে (উদাহরণস্বরূপ যাদু পদ্ধতিগুলির সাথে)। এবিসিগুলি ভার্চুয়াল সাবক্লাসগুলি প্রবর্তন করে, যেগুলি ক্লাস থেকে উত্তরাধিকারসূত্রে পাওয়া যায় না কিন্তু এখনও isinstance() এবং issubclass() ফাংশন দ্বারা স্বীকৃত হয়৷ পাইথনে অনেক বিল্ট-ইন এবিসি রয়েছে। ইটারেটর, জেনারেটর, সেট, ম্যাপিং ইত্যাদি ডেটা স্ট্রাকচারের জন্য ABCগুলি collections.abc মডিউলে সংজ্ঞায়িত করা হয়েছে। সংখ্যার মডিউলটি সাংখ্যিক টাওয়ারকে সংজ্ঞায়িত করে যা সাংখ্যিক ডেটা প্রকারের জন্য বেস ক্লাসের একটি সংগ্রহ। পাইথন লাইব্রেরিতে 'abc' মডিউল কাস্টম বিমূর্ত বেস ক্লাস সংজ্ঞায়িত করার জন্য পরিকাঠামো প্রদান করে।
'abc' বেস ক্লাসের পদ্ধতিগুলিকে বিমূর্ত হিসাবে চিহ্নিত করে কাজ করে। এটি @absttractmethod ডেকোরেটর দ্বারা করা হয়েছে। একটি কংক্রিট ক্লাস যা এই ধরনের বিমূর্ত বেস ক্লাসের একটি সাব ক্লাস তারপর তার বিমূর্ত পদ্ধতিগুলিকে ওভাররাইড করে বিমূর্ত ভিত্তি প্রয়োগ করে।
abc মডিউল ABCMeta কে সংজ্ঞায়িত করে ক্লাস যা বিমূর্ত বেস ক্লাস সংজ্ঞায়িত করার জন্য একটি মেটাক্লাস। নিম্নলিখিত উদাহরণ ABCMeta ব্যবহার করে শেপ ক্লাসকে একটি বিমূর্ত বেস ক্লাস হিসাবে সংজ্ঞায়িত করে। আকৃতি শ্রেণীতে বিমূর্ত পদ্ধতি দ্বারা সজ্জিত এলাকা() পদ্ধতি রয়েছে।
একটি আয়তক্ষেত্র ক্লাস এখন উপরের শেপ ক্লাসকে এর প্যারেন্ট হিসাবে ব্যবহার করে এবং বিমূর্ত এলাকা() পদ্ধতি প্রয়োগ করে। যেহেতু এটি একটি কংক্রিট ক্লাস, তাই এটিকে তাৎক্ষণিকভাবে প্রয়োগ করা যেতে পারে এবং এলাকা() পদ্ধতিকে বলা যেতে পারে।
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 এবং @abstractstatic মেথড ডেকোরেটরদের দ্বারা অ্যাবস্ট্রাক্ট বেস ক্লাসে ক্লাস পদ্ধতি এবং স্ট্যাটিক পদ্ধতি প্রদান করতে পারেন।