Thanks to visit codestin.com
Credit goes to flexiple.com

Flexiple Logo
  1. Home
  2. Blogs
  3. Python
  4. Encapsulation In Python

Encapsulation In Python

Author image

Harsh Pandey

Software Developer

Published on Tue Mar 12 2024

Encapsulation in Python is a key principle of object-oriented programming, enabling the bundling of data with methods that operate on that data. It restricts direct access to some of an object's components, which is essential for data hiding and security. This is achieved using private and protected members (prefixes __ and _, respectively). Encapsulation ensures a class's internal representation is hidden from the outside, only allowing manipulation through methods, thus safeguarding against unauthorized access and modifications.

Class

Encapsulation in Python is a mechanism of wrapping the data (variables) and code acting on the data (methods) together as a single unit. In encapsulation, the variables of a class are hidden from other classes, and can be accessed only through the methods of their current class. Therefore, it serves as a way to restrict access to methods and variables, thereby preventing the data from being modified by accidental or unauthorized actions.

To implement encapsulation in Python, we use private and protected attributes by prefixing them with single or double underscores respectively. A private member __variable is accessible only within its own class, while a protected member _variable is accessible within the class and its subclasses.

Here's a simple example demonstrating encapsulation.

class Car:
    def __init__(self):
        self.__maxspeed = 200 # Private attribute
        self._name = "Supercar" # Protected attribute

    def drive(self):
        print('Driving. Max speed ' + str(self.__maxspeed))

myCar = Car()
myCar.drive()
# Attempting to access __maxspeed directly will result in an attribute error
# print(myCar.__maxspeed) # This will raise an error

In this example, __maxspeed is a private attribute, not accessible from outside its class, ensuring that maxspeed can only be modified within the Car class methods. This protects the maxspeed attribute from being altered directly, embodying the principle of encapsulation.

Protected Members

Protected members in Python are part of its encapsulation feature, designed to prevent data from being accessed directly. These members are indicated by a single underscore prefix _ in their names, signaling that they are protected and should only be accessed within the class and its subclasses. Unlike private members, protected members are accessible from outside the class, but this access is conventionally discouraged to maintain object integrity.

For example.

class Car:
    def __init__(self):
        self._speed = 0  # Protected attribute

    def accelerate(self, value):
        self._speed += value  # Accessing protected attribute within class

class SportsCar(Car):
    def increase_speed(self, value):
        self._speed += value  # Accessing protected attribute in subclass

# Outside access
my_car = SportsCar()
my_car.accelerate(10)
print(my_car._speed)  # Discouraged, but possible

This code illustrates how protected members _speed are utilized within the class and its subclass, showcasing Python's encapsulation capabilities.

Private Members

Private members in Python are attributes and methods inaccessible from outside their class definition, crucial for encapsulation. Encapsulation ensures internal representation of an object is hidden from the outside, only allowing access through methods defined in the class. Python denotes private members with a prefix underscore (_) for protected or double underscore (__) for private, signaling no external access.

For example.

class MyClass:
    def __init__(self):
        self.__privateVar = "I am private"
        self._protectedVar = "I am protected"

    def __privateMethod(self):
        return "This is a private method"

    def publicMethod(self):
        return self.__privateMethod() + " accessed publicly"

obj = MyClass()
# Accessing public method which internally accesses a private method
print(obj.publicMethod())
# Direct access to __privateVar or __privateMethod() raises an AttributeError

This coding example showcases encapsulation by restricting access to sensitive data and methods, ensuring robust and secure code design.

Related Blogs

Browse Flexiple's talent pool

Explore our network of top tech talent. Find the perfect match for your dream team.