Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python में एब्स्ट्रैक्ट बेस क्लास (abc)


एक क्लास को एब्स्ट्रैक्ट क्लास कहा जाता है यदि इसमें एक या अधिक एब्स्ट्रैक्ट मेथड होते हैं। एक एब्स्ट्रैक्ट मेथड एक ऐसा मेथड है जो घोषित है, लेकिन इसमें कोई कार्यान्वयन नहीं है। एब्स्ट्रैक्ट क्लास को इंस्टेंटिएट नहीं किया जा सकता है, और इसके एब्स्ट्रैक्ट मेथड को इसके सबक्लास द्वारा लागू किया जाना चाहिए।

एब्स्ट्रैक्ट बेस क्लास इंटरफेस को परिभाषित करने का एक तरीका प्रदान करते हैं जब अन्य तकनीकें जैसे hasattr() अनाड़ी या सूक्ष्म रूप से गलत होंगी (उदाहरण के लिए मैजिक मेथड के साथ)। ABCs वर्चुअल सबक्लास पेश करते हैं, जो ऐसी क्लास हैं जो किसी क्लास से इनहेरिट नहीं करती हैं लेकिन फिर भी isinstance() और issubclass() फ़ंक्शन द्वारा पहचानी जाती हैं। Python में कई बिल्ट-इन ABCs हैं। Iterator, Generator, Set, Mapping आदि जैसे डेटा संरचनाओं के लिए ABCs collections.abc मॉड्यूल में परिभाषित हैं। numbers मॉड्यूल न्यूमेरिक टावर को परिभाषित करता है जो संख्यात्मक डेटा प्रकारों के लिए बेस क्लास का एक संग्रह है। Python लाइब्रेरी में 'abc' मॉड्यूल कस्टम एब्स्ट्रैक्ट बेस क्लास को परिभाषित करने के लिए बुनियादी ढांचा प्रदान करता है।

'abc' बेस क्लास के मेथड को एब्स्ट्रैक्ट के रूप में चिह्नित करके काम करता है। यह @abstractmethod डेकोरेटर द्वारा किया जाता है। एक ठोस क्लास जो इस तरह के एब्स्ट्रैक्ट बेस क्लास की सबक्लास है, फिर अपने एब्स्ट्रैक्ट मेथड को ओवरराइड करके एब्स्ट्रैक्ट बेस को लागू करती है।

abc मॉड्यूल ABCMeta क्लास को परिभाषित करता है जो एब्स्ट्रैक्ट बेस क्लास को परिभाषित करने के लिए एक मेटाक्लास है। निम्नलिखित उदाहरण ABCMeta का उपयोग करके Shape क्लास को एब्स्ट्रैक्ट बेस क्लास के रूप में परिभाषित करता है। 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. - Python में बेस ओवरलोडिंग मेथड्स क्या हैं?

    Python क्लासेस ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग पैराडाइम की सभी स्टैंडर्ड विशेषताएं प्रदान करती हैं: क्लास इनहेरिटेंस मैकेनिज्म मल्टीपल बेस क्लासेस की अनुमति देता है। एक डेराइव्ड क्लास अपने बेस क्लास या क्लासेस के किसी भी मेथड को ओवरराइड कर सकती है, और एक मेथड उसी नाम के बेस क्लास के मेथड को कॉल कर सक

  1. - Python में क्लासेस और इनहेरिटेंस का परिचय

    ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग प्रोजेक्ट्स में कोड रिडंडेंसी को रोकने के लिए कोड के पुन: प्रयोज्य पैटर्न बनाता है। पुन: प्रयोज्य कोड बनाने का एक तरीका इनहेरिटेंस है, जब एक सबक्लास दूसरी बेस क्लास से कोड का लाभ उठाता है। इनहेरिटेंस तब होता है जब एक क्लास दूसरी क्लास के भीतर लिखे कोड का उपयोग करती है।

  1. - Python में क्लासेस कैसे डिफाइन करें?

    Python में, लगभग सभी कोड क्लासेस का उपयोग करके लागू किया जाता है। प्रोग्रामर संबंधित कोड के टुकड़ों को एक साथ रखने के लिए क्लासेस का उपयोग करते हैं। यह क्लास कीवर्ड का उपयोग करके किया जाता है, जो ऑब्जेक्ट-ओरिएंटेड कंस्ट्रक्ट्स का संग्रह है। एक क्लास ऑब्जेक्ट बनाने के लिए एक टेम्पलेट है। ऑब्जेक्ट्स म