Python Abstraction
In this page:
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?
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
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
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
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
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
Chapter Quiz — Complete all 11 topics to unlock
0/11 topics done
Complete these topics first: