एक वर्ग को एक सार वर्ग कहा जाता है यदि इसमें एक या अधिक अमूर्त विधियाँ हों। एक अमूर्त विधि एक ऐसी विधि है जिसे घोषित किया जाता है, लेकिन इसमें कोई कार्यान्वयन नहीं होता है। एब्सट्रैक्ट क्लासेस को इंस्टेंट नहीं किया जा सकता है, और इसके एब्सट्रैक्ट मेथड्स को इसके सबक्लास द्वारा लागू किया जाना चाहिए।
सार आधार वर्ग इंटरफेस को परिभाषित करने का एक तरीका प्रदान करते हैं जब अन्य तकनीकें जैसे हैटर () अनाड़ी या सूक्ष्म रूप से गलत होंगी (उदाहरण के लिए जादू के तरीकों के साथ)। एबीसी आभासी उपवर्गों का परिचय देता है, जो ऐसे वर्ग हैं जो एक वर्ग से विरासत में नहीं मिलते हैं, लेकिन फिर भी isinstance () और issubclass () फ़ंक्शन द्वारा पहचाने जाते हैं। पायथन में कई अंतर्निहित एबीसी हैं। डेटा संरचनाओं जैसे इटरेटर, जेनरेटर, सेट, मैपिंग इत्यादि के लिए एबीसी को संग्रह.एबीसी मॉड्यूल में परिभाषित किया गया है। संख्या मॉड्यूल संख्यात्मक टावर को परिभाषित करता है जो संख्यात्मक डेटा प्रकारों के लिए आधार वर्गों का संग्रह है। पायथन पुस्तकालय में 'एबीसी' मॉड्यूल कस्टम सार आधार वर्गों को परिभाषित करने के लिए बुनियादी ढांचा प्रदान करता है।
'एबीसी' आधार वर्ग के तरीकों को सार के रूप में चिह्नित करके काम करता है। यह @absttractmethod डेकोरेटर द्वारा किया जाता है। एक ठोस वर्ग जो इस तरह के अमूर्त आधार वर्ग का एक उप वर्ग है, फिर अमूर्त आधार को उसके अमूर्त तरीकों को ओवरराइड करके लागू करता है।
एबीसी मॉड्यूल 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 को उठाया जाएगा।
एबीसी मॉड्यूल एबीसी . को भी परिभाषित करता है हेल्पर क्लास जिसे एब्सट्रैक्ट बेस क्लास की परिभाषा में 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 मेथड डेकोरेटर्स द्वारा क्रमशः क्लास मेथड्स और स्टैटिक मेथड्स भी प्रदान कर सकते हैं।