Encapsulation in Python – Explained with Examples

Updated on July 18, 2024

Article Outline

The Object-Oriented Programming language has four principles. In this article, we will discuss the Encapsulation principle, a simple yet powerful concept in Python. It involves bundling data members and functions inside a single class, making your code more organised and easier to manage. The benefits of this are immense, and we’ll explore them in detail. Let’s dive deep into Encapsulation in the Python language for more information.

What is Encapsulation in Python?

Encapsulation in Python refers to the bundling of data and methods into a single unit, which is called a class. The idea behind encapsulation is to hide an object’s internal state and only expose the necessary functionalities. This can be achieved by marking certain attributes or methods. Encapsulation in Python also ensures that objects are self-sufficient functioning pieces and work independently.

*Image
Get curriculum highlights, career paths, industry insights and accelerate your technology journey.
Download brochure

Why Do We Need Encapsulation in Python?

Let’s see why we need an Encapsulation in Python language:

  1. Data Protection:  Encapsulation helps protect data by restricting direct access to certain attributes and methods. This prevents accidental modification of data and promotes better control over how data is accessed and manipulated.
  2. Information Hiding: Encapsulation hides a class’s internal implementation details from the outside world. It exposes only the necessary interface. By hiding unnecessary information details, encapsulation reduces complexity and minimises the risk of unintended side effects.
  3. Flexibility and Maintainability: Encapsulation improves the flexibility and maintainability of code by decoupling different system components. Developers can make changes to individual components without affecting the rest of the computing system. It also makes it easier to extend, modify, and refactor code, leading to better software quality.
  4. Code Reusability: Encapsulation promotes code reusability by using the same code many times. Encapsulation encourages modular design, allowing developers to build reusable components that can be easily integrated into various applications.

Access Modifiers in Python encapsulation

In Python language, sometimes we have to restrict or limit access to certain variables of function while programming. That is where access modifiers come into the picture in Python. There are three types of access modifiers:

  • Public Members
  • Private Member
  • Protected Member

 

Access Specifier Access From own class Accessible from derived class Accessible from object
Private Member Yes No No
Protected Member Yes Yes No
Public Member Yes Yes Yes

Encapsulation in Python using public members

In this section, we will use the public modifier that allows variables and functions to be accessible from anywhere within the class and from any part of the program. All the members’ variables have the access modifier as public or default.

 

The following program demonstrates the Encapsulation in Python using the public modifiers:

 

Program

 

class Modifier: # constructor def __init__(self, name, age): self.name = name; self.age = age; def Age(self): # Accessing public data member print("Age: ", self.age) obj = Modifier(“Murli", 50); print("Name: ", obj.name) obj.Age()

 

Output

 

Name:  Murli Age:  50

Encapsulation in Python using private members

In this section, we will use a private access modifier that allows member methods and variables to be accessed only within the class.  To specify a private access modifier for a member, we make use of the double underscore__

 

The following program demonstrates the Encapsulation in Python using private members:

 

Program

 

class Rectangle: __length = 0 __breadth = 0 def __init__(self): #constructor self.__length = 33 self.__breadth = 343 print(self.__length) print(self.__breadth) rect = Rectangle() print(rect.length) print(rect.breadth)

  

Output

 

33 343 ERROR! Traceback (most recent call last): File "<main.py>", line 12, in <module> AttributeError: 'Rectangle' object has no attribute 'length'

 

In the above code, we have received an AttributeError in the output. In the above example, we tried to access it outside the class, which is why we received the above error. We can access private members from the outside of a class using the following two approaches:

  • Public method to access private members
  • Name Mangling to access private members

Public method to access private members

The following program demonstrates the Public method of accessing private members:

 

Program

 

# Public method access to private members class details: _name="Rahul" _age=2343 _job="Content Writer" class pro_mod(details): def __init__(self): print(self._name) print(self._age) print(self._job) # Here, we are creating an object obj = pro_mod()

 

Output

 

Murli 2343 Content Writer

Name Mangling to access private members

In this section, we can directly access private and protected variables from the outside of a class. The name mangling is created on an identifier by adding two leading underscores and one trailing underscore, like this _classname_dataMember, where the class name is the current class, and the data is the private variable name.

 

The following program demonstrates Name Mangling to access private members:

 

Program

 

class details: _name="Bullet" _age=3343 _job="Biker" class pro_mod(details): def __init__(self): print(self._name) print(self._age) print(self._job) # creating object of the class obj = pro_mod() # direct access to protected member print("Name:",obj._name) print("Age:",obj._age)

 

Output

 

Neha 3343 Don't know Name: Neha Age: 3343

Encapsulation in Python using protected members

In this section, we will use the protected member in the Python language. That allows the members to access the class and allows them to be accessed by the sub-class involved. In Python language, we demonstrated a protected member. we know that if the members have a protected access specifier, it can be referenced within the class and the subsequent sub-class. The following program demonstrates the Encapsulation in Python using the protected members:

 

Program

 

# illustrating protected members & protected access modifier class details: _name="Jason" _age=35 _job="Developer" class pro_mod(details): def __init__(self): print(self._name) print(self._age) print(self._job) # creating object of the class obj = pro_mod() # direct access to protected member print("Name:",obj.name) print("Age:",obj.age)

 

Output

 

Jason 35 Developer ERROR! Traceback (most recent call last): File "<main.py>", line 15, in <module> AttributeError: 'pro_mod' object has no attribute 'name'

Disadvantages of Encapsulation

Encapsulation in Python offers numerous advantages. There are also some potential disadvantages of Encapsulation:

  • Increased Complexity: Encapsulation increases the complexity of the code base when the developer uses it accessible or inappropriately. For example, Creating numerous getter and setter methods for accessing and modifying private attributes may lead to verbose and harder-to-read code.

 

  • Performance Overhead: Accessing private members through methods like getters and setters may incur a slight performance overhead compared to direct access. It can become a concert in performance-critical applications.

 

  • Debugging Challenges: Encapsulation makes debugging more challenging. If the internal state of objects is hidden or difficult to inspect. Debugging tools and techniques may be less effective when dealing with heavily encapsulated source code.

Conclusion

In this article, we have explored encapsulation in the Python language. Encapsulation is a powerful concept that allows developers to control access to certain parts of an object, thereby protecting its internal state and preventing unintended modification of the code. By using encapsulation, we can hide the implementation details of a class and only expose the necessary components of the code. It promotes better code readability, maintenance and security.

 

FAQs
The primary encapsulation hides the data from outside access. It helps manage complexity, improve code organization, enhance security, and reduce coupling between different parts of a program.
Python does not enforce encapsulation in the same way as other programming languages like Java. However, it can be encouraged through conventions and code reviews. Python developers can use naming conventions (eg. prefixing private members with double underscores) and documentation to indicate which members are meant to the private or protected.
Python language does not significantly impact performance accessing private members through methods like getters and setters may incur a slight performance compared to direct access. However, this overhead is usually minimal and outweighs the benefits of encapsulation.
Developers can use encapsulation whenever they want to hide an object's internal state and expose only a well-defined interface for interacting with it. It is particularly useful when designing classes that are part of a larger system or library. Encapsulation helps manage complexity and ensure code reliability.

Updated on July 18, 2024

Link
left dot patternright dot pattern

Programs tailored for your success

Popular

IIT Courses

Management

Data Science

Finance

Technology

Future Tech

Upskill with expert articles

View all
Hero Vired logo
Hero Vired is a leading LearnTech company dedicated to offering cutting-edge programs in collaboration with top-tier global institutions. As part of the esteemed Hero Group, we are committed to revolutionizing the skill development landscape in India. Our programs, delivered by industry experts, are designed to empower professionals and students with the skills they need to thrive in today’s competitive job market.
Blogs
Reviews
Events
In the News
About Us
Contact us
Learning Hub
18003093939     ·     hello@herovired.com     ·    Whatsapp
Privacy policy and Terms of use

|

Sitemap

© 2024 Hero Vired. All rights reserved