लर्निंग पाथ
आधुनिक सॉफ्टवेयर विकास का एक प्रमुख घटक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) है, जो प्रोग्रामरों को कोड को स्केलेबल, मॉड्यूलर और पुन: उपयोग योग्य तरीके से संगठित करने की क्षमता देता है। एब्स्ट्रैक्ट क्लासेस OOP की कई अवधारणाओं में से एक हैं जो अन्य कक्षाओं के लिए एक टेम्पलेट बनाने में आवश्यक होती हैं। यह पोस्ट एब्स्ट्रैक्ट क्लासेस, उनके लाभ, और Python के abc मॉड्यूल का उपयोग करके उन्हें सफलतापूर्वक बनाने के तरीके की व्याख्या करेगी।
यदि आप Python में नए हैं, तो आप हमारे स्किल ट्रैक के साथ मॉड्यूल और पैकेज के साथ काम करना, बिल्ट-इन डेटा टाइप्स के साथ काम करना, और कस्टम फंक्शंस लिखना सीख सकते हैं।
Abstract Class क्या है?
एब्स्ट्रैक्ट क्लास अन्य कक्षाओं के लिए एक टेम्पलेट जैसी होती है। यह उन विधियों (methods) को परिभाषित करती है जिन्हें उससे विरासत में लेने वाली किसी भी कक्षा में शामिल होना चाहिए, लेकिन उन विधियों के लिए वास्तविक कोड उपलब्ध नहीं कराती।
इसे बिना विशिष्ट सामग्री की रेसिपी की तरह समझें—यह आपको बताती है कि कौन से चरण अपनाने हैं, पर विवरण सबक्लास पर निर्भर करता है।
उदाहरण:
मान लीजिए आप अलग-अलग आकृतियों का क्षेत्रफल निकालने वाला प्रोग्राम बना रहे हैं।
- आप
Shapeनाम की एक एब्स्ट्रैक्ट क्लास बनाते हैं जो कहती है कि हर आकृति मेंarea()मेथड जरूर होना चाहिए। - लेकिन
Shapeयह परिभाषित नहीं करती किarea()कैसे काम करेगा—क्योंकि सूत्र आकृति के प्रकार पर निर्भर करता है। - हर विशिष्ट आकृति (जैसे
CircleयाRectangle)Shapeसे इनहेरिट करती है और अपने तरीके सेarea()को परिभाषित करती है।
यदि आप प्रमुख Python अवधारणाएँ और सीखना चाहते हैं, तो हमारे Intermediate Object-Oriented Programming in Python कोर्स में नामांकन करें।
Python में abstract classes का उपयोग क्यों करें?
एब्स्ट्रैक्ट क्लासेस तब उपयोगी होती हैं जब आप:
- मेथड इम्प्लीमेंटेशन अनिवार्य करना: एब्स्ट्रैक्ट क्लास की विधियाँ एक अनुबंध (contract) की तरह काम करती हैं, जो हर सबक्लास से अपनी-अपनी इम्प्लीमेंटेशन देने की मांग करती हैं। इससे सभी व्युत्पन्न कक्षाओं में विशिष्ट कार्यक्षमता सुनिश्चित होती है और असंगत या अधूरी इम्प्लीमेंटेशन का जोखिम कम होता है।
- कोड पुन: उपयोग को प्रोत्साहित करना: एब्स्ट्रैक्ट क्लासेस में कॉन्क्रीट और एब्स्ट्रैक्ट दोनों तरह की विधियाँ हो सकती हैं। कॉन्क्रीट विधियाँ साझा कार्यक्षमता देकर कोड डुप्लिकेशन को काफी हद तक घटाती हैं और DRY (Do not Repeat Yourself) सिद्धांतों को बढ़ावा देती हैं।
- पढ़नेयोग्यता और मेंटेनबिलिटी में सुधार: एब्स्ट्रैक्ट क्लासेस एक सुसंगत और पारदर्शी ढांचा प्रदान करती हैं, जिससे डेवलपर्स को सॉफ्टवेयर की संरचना और कार्यप्रणाली बेहतर समझ आती है। यह संरचना सिंगल रिस्पॉन्सिबिलिटी और सेपरेशन ऑफ कंसर्न्स जैसे डिजाइन सिद्धांतों को लागू करके कोड को बनाए रखना आसान बनाती है।
- पॉलीमॉर्फिज़्म को प्रोत्साहित करना: एब्स्ट्रैक्ट क्लासेस सामान्य कोड लिखने में सक्षम बनाती हैं जो विभिन्न सबक्लासेस के साथ अच्छे से काम करता है। डेवलपर्स ऐसी फंक्शंस या मेथड्स बना सकते हैं जो एब्स्ट्रैक्ट क्लास की किसी भी सबक्लास को संभाल सकें, जिससे कोड की विस्तारयोग्यता और भविष्य के परिवर्तनों के प्रति अनुकूलता बढ़ती है।
उदाहरण के लिए, यदि आपके पास speak नाम की एब्स्ट्रैक्ट विधि के साथ एक एब्स्ट्रैक्ट क्लास Animal है, तो आप सुनिश्चित कर सकते हैं कि कोई भी सबक्लास, जैसे Dog या Cat, अपनी speak विधि की इम्प्लीमेंटेशन प्रदान करे। इस समानता के कारण आपका कोड विश्वसनीय और पूर्वानुमेय बनता है।
Python में abc मॉड्यूल
Python का abc मॉड्यूल एब्स्ट्रैक्ट क्लासेस के लिए मजबूत बिल्ट-इन सपोर्ट प्रदान करता है। यह मॉड्यूल, जिसका अर्थ है "Abstract Base Classes", एब्स्ट्रैक्ट क्लासेस बनाने के लिए आवश्यक टूल्स देता है, जिनमें abstractmethod डेकोरेटर और ABC क्लास शामिल हैं।
एब्स्ट्रैक्ट मेथड्स को परिभाषित करके और उनकी इम्प्लीमेंटेशन सबक्लासेस में अनिवार्य करके, ये टूल्स आपको एक पूर्वनिर्धारित इंटरफेस के प्रति एकरूपता और अनुपालन बनाए रखने में मदद करते हैं। यह मॉड्यूल सभी व्युत्पन्न कक्षाओं में आवश्यक विधियों की इम्प्लीमेंटेशन अनिवार्य कर, और एब्स्ट्रैक्ट बेस क्लासेस में सामान्य कार्यक्षमता की आंशिक इम्प्लीमेंटेशन की अनुमति देकर, बेहतर डिजाइन पैटर्न को भी प्रोत्साहित करता है।
इसी कारण, ABC मॉड्यूल स्केलेबल, मजबूत और स्थिर Python अनुप्रयोगों को व्यवस्थित करने के लिए एक महत्वपूर्ण घटक है।
Python Abstract Class बनाना
ABC मॉड्यूल में दो आवश्यक घटक होते हैं:
Abstract Base Class, या ABC
ABC क्लास Python की एक बिल्ट-इन सुविधा है जो एब्स्ट्रैक्ट क्लासेस विकसित करने के लिए आधार प्रदान करती है। किसी एब्स्ट्रैक्ट क्लास को परिभाषित करने के लिए आपको ABC से इनहेरिट करना होता है। यह इनहेरिटेंस बताता है कि क्लास एब्स्ट्रैक्ट है और उसे सीधे इंस्टेंशिएट नहीं किया जा सकता। ब्लूप्रिंट की तरह काम करते हुए, एब्स्ट्रैक्ट क्लासेस सुनिश्चित करती हैं कि कोई भी कॉन्क्रीट सबक्लास नियमों के एक सेट का पालन करे।
आप abstractmethod डेकोरेटर का उपयोग करके एब्स्ट्रैक्ट क्लास के भीतर एब्स्ट्रैक्ट विधियाँ परिभाषित कर सकते हैं। एब्स्ट्रैक्ट विधियाँ प्लेसहोल्डर होती हैं जिन्हें कोई भी कॉन्क्रीट सबक्लास इम्प्लीमेंट और ओवरराइड करेगा। इससे सभी व्युत्पन्न कक्षाएँ निर्दिष्ट विधियों के लिए कार्यक्षमता प्रदान करती हैं, और कोड सुसंगत व पूर्वानुमेय बनता है। abstractmethod डेकोरेटर मेथड इम्प्लीमेंटेशन अनिवार्य कराने का एक उपयोगी साधन है, जबकि यह सबक्लासेस को यह लचीलापन देता है कि वे इन आवश्यकताओं को कैसे पूरा करें।
यहाँ एक बुनियादी उदाहरण है:
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14159 * self.radius ** 2
def perimeter(self):
return 2 * 3.14159 * self.radius
# Uncommenting the following line will raise an error because we’re missing method implementations
# shape = Shape() # TypeError: Can't instantiate abstract class Shape with abstract methods #area, perimeter
circle = Circle(5)
print(f"Area: {circle.area()}")
print(f"Perimeter: {circle.perimeter()}")
# Area: 78.53975
# Perimeter: 31.4159
यदि आप और व्यावहारिक Python प्रोजेक्ट्स की तलाश में हैं, तो सभी स्तरों के डेवलपर्स के लिए हमारे शीर्ष 60 Python प्रोजेक्ट्स की सूची देखें।
abc मॉड्यूल मेथड इम्प्लीमेंटेशन को कैसे अनिवार्य कराता है
abstractmethod डेकोरेटर यह सुनिश्चित करता है कि एब्स्ट्रैक्ट क्लास की कोई भी सबक्लास सजाई गई विधियों को इम्प्लीमेंट करे। यह एक सुरक्षा उपाय के रूप में काम करता है और आवश्यक क्षमताओं के बिना सबक्लासेस बनने से रोकता है।
यदि कोई सबक्लास सभी एब्स्ट्रैक्ट विधियों को ओवरराइड किए बिना इंस्टेंशिएट की जाती है, तो Python TypeError रिपोर्ट करता है। यह सख्त प्रवर्तन डेवलपर्स को शुरुआती चरण में ही इम्प्लीमेंटेशन की खामियाँ पहचानने में मदद करता है, जिससे दोषों की संभावना घटती है और कोड स्थिरता बढ़ती है।
यह भी सुनिश्चित करता है कि सभी कॉन्क्रीट सबक्लासेस एब्स्ट्रैक्ट क्लास के अभिप्रेत व्यवहार और डिजाइन का पालन करें।
उदाहरण के लिए:
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
# Missing area and perimeter implementation
# This will raise an error
rectangle = Rectangle(5, 10)
# TypeError: Can't instantiate abstract class Rectangle with abstract methods area, perimeter
Python में Abstract Class Methods
Python में एब्स्ट्रैक्ट क्लास को परिभाषित करने में abstractmethod डेकोरेटर का उपयोग और ABC से सबक्लासिंग शामिल है। ऐसा करके, प्रोग्रामर अन्य कक्षाओं के लिए आवश्यक विधियाँ परिभाषित कर एक बुनियादी ढांचा तैयार कर सकते हैं।
यहाँ एक विस्तृत, चरण-दर-चरण प्रक्रिया है:
- आवश्यक मॉड्यूल आयात करें: शुरुआत में
ABCऔरabstractmethodकोABCमॉड्यूल से इम्पोर्ट करें। एब्स्ट्रैक्ट क्लासेस और विधियाँ परिभाषित करने के लिए ये टूल्स आवश्यक हैं। ABCपर आधारित क्लास बनाएँ: एक नई क्लास बनाएँ औरABCको उसका इनहेरिटर सेट करें। यह इनहेरिटेंस बताता है कि क्लास एब्स्ट्रैक्ट है और सीधे इंस्टेंशिएट नहीं की जा सकती।@abstractmethodसे एब्स्ट्रैक्ट विधियाँ परिभाषित करें: यह बताने के लिए@abstractmethodडेकोरेटर का उपयोग करें कि किन विधियों को सबक्लासेस को ओवरराइड करना चाहिए। मूलतः, ये विधियाँ प्लेसहोल्डर के रूप में काम करती हैं, यह सुनिश्चित करते हुए कि सभी व्युत्पन्न कक्षाएँ आवश्यक कार्यों का निष्पादन करें।
एब्स्ट्रैक्ट क्लास परिभाषित करने का चरण-दर-चरण उदाहरण
इसे दर्शाने के लिए एक व्यावहारिक उदाहरण:
from abc import ABC, abstractmethod
class Vehicle(ABC):
@abstractmethod
def start_engine(self):
pass
@abstractmethod
def stop_engine(self):
pass
class Car(Vehicle):
def start_engine(self):
print("Car engine started")
def stop_engine(self):
print("Car engine stopped")
# Instantiating the abstract class directly will raise an error
# vehicle = Vehicle()
car = Car()
car.start_engine()
car.stop_engine()
# Car engine started
# Car engine stopped
यह सुनिश्चित करता है कि Vehicle की कोई भी सबक्लास start_engine और stop_engine फ़ंक्शंस को इम्प्लीमेंट करे।
व्यावहारिक उदाहरण: एब्स्ट्रैक्ट क्लास इम्प्लीमेंटेशन
Vehicle क्लास का उपयोग करते हुए एक अधिक विस्तृत उदाहरण देखें:
from abc import ABC, abstractmethod
class Vehicle(ABC):
def __init__(self, brand):
self.brand = brand
@abstractmethod
def start_engine(self):
pass
@abstractmethod
def stop_engine(self):
pass
class Motorcycle(Vehicle):
def start_engine(self):
print(f"{self.brand} motorcycle engine started")
def stop_engine(self):
print(f"{self.brand} motorcycle engine stopped")
motorcycle = Motorcycle("Yamaha")
motorcycle.start_engine()
motorcycle.stop_engine()
# Yamaha motorcycle engine started
# Yamaha motorcycle engine stopped
यह दर्शाता है कि एब्स्ट्रैक्ट क्लासेस एक सुसंगत इंटरफेस लागू करते हुए इम्प्लीमेंटेशन में लचीलापन कैसे प्रदान करती हैं।
Python Abstract Base Class उदाहरण
अब जब हमने देख लिया है कि एब्स्ट्रैक्ट बेस क्लासेस सबक्लासेस के लिए अनुबंध कैसे परिभाषित करती हैं, तो आइए देखें कि कॉन्क्रीट क्लासेस सभी एब्स्ट्रैक्ट मेथड्स को इम्प्लीमेंट करके इन आवश्यकताओं को कैसे पूरा करती हैं।
एब्स्ट्रैक्ट क्लास से इनहेरिट करने वाली कॉन्क्रीट क्लास
एब्स्ट्रैक्ट क्लास की हर एब्स्ट्रैक्ट विधि को इम्प्लीमेंट करने वाली सबक्लास को कॉन्क्रीट क्लास कहा जाता है। इसका अर्थ है कि कॉन्क्रीट क्लास सभी आवश्यक विधियों के लिए विशिष्ट इम्प्लीमेंटेशन प्रदान करती है, इस प्रकार एब्स्ट्रैक्ट क्लास द्वारा स्थापित अनुबंध को पूरा करती है।
उदाहरण के लिए:
from abc import ABC, abstractmethod
class Appliance(ABC):
@abstractmethod
def turn_on(self):
pass
@abstractmethod
def turn_off(self):
pass
class WashingMachine(Appliance):
def turn_on(self):
print("Washing machine is now ON")
def turn_off(self):
print("Washing machine is now OFF")
machine = WashingMachine()
machine.turn_on()
machine.turn_off()
# Washing machine is now ON
# Washing machine is now OFF
इंस्टेंस बनाना और नियम लागू करना
Python आपको एब्स्ट्रैक्ट क्लास को सीधे इंस्टेंशिएट करने से रोकता है। यह एब्स्ट्रैक्ट क्लासेस का एक आवश्यक पहलू है, क्योंकि यह सुनिश्चित करता है कि एब्स्ट्रैक्ट क्लास से उत्पन्न कोई भी सबक्लास उसकी एब्स्ट्रैक्ट विधियों द्वारा दिए गए आवश्यक अनुबंध का पालन करे।
उदाहरण के लिए, यदि आप appliance = Appliance() इंस्टेंशिएट करने का प्रयास करते हैं, तो TypeError उठेगा।
यह प्रतिबंध सुनिश्चित करता है कि एब्स्ट्रैक्ट क्लासेस केवल ब्लूप्रिंट के रूप में कार्य करें और उनका दुरुपयोग न हो। WashingMachine में सभी एब्स्ट्रैक्ट विधियों को इम्प्लीमेंट करके, Python Appliance में निर्दिष्ट अनुबंध को बनाए रखते हुए WashingMachine के इंस्टेंस बनाने की अनुमति देता है। एब्स्ट्रैक्ट क्लास में परिभाषित प्रत्येक फीचर को उसकी कॉन्क्रीट सबक्लासेस में पूरी तरह लागू कर, यह प्रवर्तन कोडबेस की अखंडता में सुधार करता है।
Abstract Properties और Initialization
इस आधार के साथ, आइए देखें कि Python कैसे @property और @abstractmethod डेकोरेटर्स का उपयोग करके एब्स्ट्रैक्ट प्रॉपर्टीज़ का समर्थन करता है, जिससे डेवलपर्स को विधियों के साथ-साथ एट्रिब्यूट एकरूपता लागू करने में मदद मिलती है।
Python में abstract properties का उपयोग
एब्स्ट्रैक्ट क्लासेस विधियों के अलावा ऐसी प्रॉपर्टीज़ भी निर्दिष्ट कर सकती हैं जिन्हें सबक्लासेस को इम्प्लीमेंट करना होगा। यह सुविधा डेवलपर्स को ऐसी प्रॉपर्टीज़ के लिए एक समान इंटरफेस लागू करने में सक्षम बनाती है जिन्हें सबक्लासेस को विधियों के साथ-साथ घोषित करना चाहिए।
यह सुनिश्चित करने के लिए कि हर सबक्लास अपनी इम्प्लीमेंटेशन प्रदान करे, एब्स्ट्रैक्ट प्रॉपर्टीज़ को @property डेकोरेटर को @abstractmethod के साथ मिलाकर निर्दिष्ट किया जा सकता है। यह तरीका विशेष रूप से तब उपयोगी है जब ऐसी कक्षाएँ बनाई जा रही हों जिन्हें रीड-ओनली या कंप्यूटेड एट्रिब्यूट्स की आवश्यकता हो जो क्लास के संचालन के लिए आवश्यक हों।
उदाहरण: प्रॉपर्टीज़ के साथ एब्स्ट्रैक्ट क्लास
यहाँ एक उदाहरण है:
from abc import ABC, abstractmethod
class Animal(ABC):
@property
@abstractmethod
def sound(self):
pass
class Bird(Animal):
@property
def sound(self):
return "Chirp"
bird = Bird()
print(bird.sound)
# Chirp
Bird क्लास की sound प्रॉपर्टी Animal एब्स्ट्रैक्ट क्लास की शर्त को पूरा करती है।
Python Abstract Classes का उपयोग कब करें
एब्स्ट्रैक्ट क्लासेस इन परिस्थितियों में आदर्श होती हैं:
- जब ऐसे फ्रेमवर्क या लाइब्रेरी डिजाइन कर रहे हों जहाँ विशिष्ट व्यवहार लागू करना आवश्यक हो: जटिल सिस्टमों में, एब्स्ट्रैक्ट क्लासेस ऐसे एकीकृत नियमों या इंटरफेस का सेट बना सकती हैं जिनका सभी सबक्लासेस को पालन करना चाहिए, जिससे एकरूपता सुनिश्चित होती है और त्रुटियाँ कम होती हैं।
- कक्षाओं में सुसंगत APIs लागू करना: एब्स्ट्रैक्ट मेथड्स को परिभाषित करके, डेवलपर्स यह सुनिश्चित कर सकते हैं कि सभी व्युत्पन्न कक्षाएँ अनुप्रयोग या लाइब्रेरी के साथ बातचीत करने का एक मानकीकृत और पूर्वानुमेय तरीका प्रदान करें।
- क्लास हाइरार्की के लिए एक बुनियादी ढाँचा उपलब्ध कराना: संबंधित कक्षाओं की एक हाइरार्की एब्स्ट्रैक्ट क्लासेस को मार्गदर्शक के रूप में उपयोग करके बनाई जा सकती है। एब्स्ट्रैक्ट क्लास में साझा व्यवहारों और विशेषताओं को घोषित करने देकर और सबक्लासेस में कस्टमाइजेशन की अनुमति देकर, यह संरचना पुन: उपयोग को बढ़ावा देती है और डुप्लीकेशन को कम करती है।
सर्वोत्तम प्रथाएँ
जब सबक्लासेस के लिए एक सटीक अनुबंध स्थापित करने की आवश्यकता हो, तब एब्स्ट्रैक्ट क्लासेस का उपयोग करें। जब आपको कई व्युत्पन्न कक्षाओं में किसी विशिष्ट संरचना या व्यवहार को लागू करना हो, तो एब्स्ट्रैक्ट क्लासेस उपयोगी होती हैं। वे सुनिश्चित करने में मदद करती हैं कि हर सबक्लास एक मानक डिजाइन का पालन करे, जिससे कोड की पूर्वानुमेयता बढ़ती है और रखरखाव सरल होता है।
यदि हर विधि की एक डिफॉल्ट इम्प्लीमेंटेशन हो सकती है, तो एब्स्ट्रैक्ट क्लासेस का उपयोग न करें। ऐसी स्थितियों में, साझा कार्यक्षमता का पुन: उपयोग बनाए रखते हुए जटिलता घटाने के लिए एक कॉन्क्रीट बेस क्लास बेहतर विकल्प हो सकता है।
सुनिश्चित करें कि एब्स्ट्रैक्ट क्लासेस स्पष्ट और सरल हों, और केवल सबसे महत्वपूर्ण एट्रिब्यूट्स और विधियाँ ही परिभाषित करें। यदि किसी एब्स्ट्रैक्ट क्लास में बहुत अधिक आवश्यकताएँ हों, तो उसे बनाना और बनाए रखना चुनौतीपूर्ण हो सकता है। इसके बजाय, उन अनिवार्य पहलुओं पर ध्यान केंद्रित करें जो व्युत्पन्न कक्षाओं में होने चाहिए।
निष्कर्ष
Python के OOP टूलकिट में एब्स्ट्रैक्ट क्लासेस एक शक्तिशाली साधन हैं, जो प्रोग्रामरों को विश्वसनीय और मेंटेन करने योग्य प्रोग्राम बनाने में सक्षम बनाती हैं। एब्स्ट्रैक्ट क्लासेस को परिभाषित करके और ABC मॉड्यूल की मदद से सबक्लासेस में एक समान इंटरफेस लागू करके, आप अपने अनुप्रयोगों में स्पष्टता, पुन: उपयोग, और विस्तारयोग्यता को बढ़ावा दे सकते हैं। आप जिस भी आकार के सिस्टम पर काम कर रहे हों, एब्स्ट्रैक्ट क्लासेस को लागू करना बेहतर और अधिक भरोसेमंद कोड लिखने में सहायक होता है।
चाहे आप मजबूत ऑब्जेक्ट-ओरिएंटेड प्रोग्राम डिज़ाइन कर रहे हों, सुसंगत इंटरफेस लागू कर रहे हों, या स्केलेबल एप्लिकेशन बना रहे हों, Python एब्स्ट्रैक्ट क्लासेस में महारत आपके कुशल और मेंटेन करने योग्य कोड लिखने की क्षमता को बढ़ाती है। आज ही हमारे व्यापक Python Fundamentals स्किल ट्रैक के साथ अपना Python ज्ञान बढ़ाएँ।
Python Abstract Class FAQs
Python में एब्स्ट्रैक्ट मेथड कैसे परिभाषित करते हैं?
एब्स्ट्रैक्ट मेथड को abc मॉड्यूल के @abstractmethod डेकोरेटर से परिभाषित किया जाता है। यह एक प्लेसहोल्डर की तरह होता है और किसी भी सबक्लास द्वारा ओवरराइड किया जाना आवश्यक है।
क्या आप Python में एब्स्ट्रैक्ट क्लास को इंस्टेंशिएट कर सकते हैं?
नहीं, आप किसी एब्स्ट्रैक्ट क्लास को सीधे इंस्टेंशिएट नहीं कर सकते। यदि आप एब्स्ट्रैक्ट क्लास का ऑब्जेक्ट बनाने का प्रयास करते हैं, तो Python TypeError उठाएगा।
Python में `abc` मॉड्यूल का उद्देश्य क्या है?
abc मॉड्यूल Python में एब्स्ट्रैक्ट क्लासेस और मेथड्स को परिभाषित और लागू करने के लिए ABC क्लास और abstractmethod डेकोरेटर प्रदान करता है।
क्या एब्स्ट्रैक्ट क्लास में सामान्य (कॉन्क्रीट) मेथड्स हो सकते हैं?
हाँ, किसी एब्स्ट्रैक्ट क्लास में इम्प्लीमेंटेशन वाली नियमित (कॉन्क्रीट) विधियाँ हो सकती हैं। इन विधियों को सबक्लासेस इनहेरिट करके उपयोग कर सकती हैं।
