.. include:: global.rst ============================ Data Abstraction in Python ============================ Overview -------- Data abstraction is the concept of hiding implementation details and exposing only the essential features of an object or data structure. It helps reduce complexity and improves code organization. Key Principles -------------- Encapsulation ^^^^^^^^^^^^^ Encapsulation bundles data and methods that operate on that data into a single unit. - Prevents direct modification of data - Encourages controlled access through methods Example:: class BankAccount: def __init__(self, balance): self._balance = balance # "protected" attribute def deposit(self, amount): self._balance += amount def get_balance(self): return self._balance Information Hiding ^^^^^^^^^^^^^^^^^^ Internal details are hidden from the user. - Use naming conventions: - ``_variable`` (protected) - ``__variable`` (private, name mangling) Example:: class Example: def __init__(self): self.__hidden = 10 def get_value(self): return self.__hidden Abstraction with Classes -------------------------- Classes provide a way to define abstract data types. - Focus on *what* an object does, not *how* it does it - Methods define the interface Example:: class Car: def start(self): print("Car started") Abstract Base Classes (ABC) ---------------------------- Python supports abstraction using abstract base classes via the ``abc`` module. - Cannot instantiate abstract classes directly - Require subclasses to implement abstract methods Example:: from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass class Square(Shape): def __init__(self, side): self.side = side def area(self): return self.side * self.side Benefits of Data Abstraction ------------------------------- - Reduces complexity - Improves code readability - Enhances maintainability - Promotes code reuse - Protects data integrity Summary -------- Data abstraction in Python allows developers to: - Hide implementation details - Expose clear interfaces - Build modular and reusable code Common techniques include encapsulation, naming conventions, and abstract base classes.