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

अजगर में सार आधार वर्ग (एबीसी)

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

सार आधार वर्ग इंटरफेस को परिभाषित करने का एक तरीका प्रदान करते हैं जब अन्य तकनीकें जैसे हैटर () अनाड़ी या सूक्ष्म रूप से गलत होंगी (उदाहरण के लिए जादू के तरीकों के साथ)। एबीसी आभासी उपवर्गों का परिचय देता है, जो ऐसे वर्ग हैं जो एक वर्ग से विरासत में नहीं मिलते हैं, लेकिन फिर भी 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 मेथड डेकोरेटर्स द्वारा क्रमशः क्लास मेथड्स और स्टैटिक मेथड्स भी प्रदान कर सकते हैं।


  1. पायथन में बेस ओवरलोडिंग के तरीके क्या हैं?

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

  1. पायथन में कक्षाओं और विरासत का परिचय

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

  1. पायथन में कक्षाओं को कैसे परिभाषित करें?

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