← Back to Python Course | Chapter 7: OOP | Lesson 8 of 11

Python Abstraction

Abstraction का मतलब है सिर्फ जो चाहिए वो दिखाना और complicated हिस्सों को छिपाना, जैसे इंजन कैसे काम करता है यह जाने बिना car चलाना। एक class यह बताए बिना कि कैसे किया जाता है, कुछ actions का वादा कर सकती है।
Syntax
python
from abc import ABC, abstractmethod

class AbstractClass(ABC):
    @abstractmethod
    def method_name(self):
        pass

Abstraction क्या है?

Abstraction का मतलब है अपनी class के public interface को इस तरह design करना कि वह सिर्फ वही expose करे जो caller को असल में चाहिए — एक Car class .start() expose कर सकती है जबकि ignition sequence को पूरी तरह छिपा दे — ताकि class के users गलती से किसी implementation detail पर depend न कर बैठें जो बाद में बदल सकती है।

उदाहरण: What is Abstraction?

python
class Car:
    def start(self):
        print("Car started")  # ignition sequence hidden

Car().start()

abc Module

abc module की ABC base class और @abstractmethod decorator आपको ऐसी class define करने देते हैं जिसे सीधे instantiate नहीं किया जा सकता और जो हर subclass को specific methods implement करने पर मजबूर करती है — किसी ऐसी subclass को instantiate करने की कोशिश जो कोई abstract method skip करती है, तुरंत TypeError raise करती है।

उदाहरण: The abc Module

python
from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

try:
    Shape()  # can't instantiate an abstract class directly
except TypeError as e:
    print(e)

Abstract Properties

@property को @abstractmethod के साथ combine करने से आप subclasses को किसी regular method की बजाय एक attribute-जैसी value implement करने पर मजबूर कर सकते हैं — यह तब उपयोगी है जब हर subclass को .area जैसा कुछ define करना ज़रूरी हो, पर हर एक उसे अलग तरीके से compute करती हो।

उदाहरण: Abstract Properties

python
from abc import ABC, abstractmethod

class Shape(ABC):
    @property
    @abstractmethod
    def area(self):  # requires subclasses to implement area as a property
        pass

class Square(Shape):
    def __init__(self, side):
        self.side = side
    @property
    def area(self):
        return self.side ** 2

print(Square(3).area)

कई Abstract Methods

एक abstract class अपने interface की ज़रूरत जितने भी abstract methods declare कर सकती है, और Python तब तक किसी subclass को instantiate नहीं होने देता जब तक उनमें से हर एक का concrete implementation न हो — partial implementations भी instantiation पर TypeError raise करती हैं।

उदाहरण: Multiple Abstract Methods

python
from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass
    @abstractmethod
    def perimeter(self):
        pass

class Square(Shape):  # must implement both abstract methods to be instantiable
    def __init__(self, side):
        self.side = side
    def area(self):
        return self.side ** 2
    def perimeter(self):
        return self.side * 4

print(Square(3).area(), Square(3).perimeter())

Abstraction के फ़ायदे

चूँकि किसी abstract interface पर depend करने वाला code यह जानने या परवाह करने की ज़रूरत नहीं रखता कि वह असल में किस concrete subclass के साथ काम कर रहा है, आप एक implementation को दूसरे से बदल सकते हैं (tests में RealDatabase की बजाय MockDatabase, उदाहरण के लिए) बिना उसे इस्तेमाल करने वाले code को छुए।

उदाहरण: Benefits of Abstraction

python
class RealDatabase:
    def get_user(self):
        return "real user"

class MockDatabase:
    def get_user(self):
        return "mock user"

def show_user(db):
    print(db.get_user())  # doesn't care which concrete class db is

show_user(MockDatabase())  # swap in a different implementation with no change above
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.