Public, Private, and Protected — Access Modifiers in Python

Public, Private, and Protected — Access Modifiers in Python

A detailed view of how we can use access modifiers in Python

Image for postPhoto by Dayne Topkin on Unsplash

Object-oriented languages, like C++ and Java, use various keywords to control and restrict the resource usage of a class.

This is where keywords like public, privateand protected come into the picture. However, Python has a different way of providing the functionality of these access modifiers.

Public Keyword

public members of a class are available to everyone. So they can be accessed from outside the class and also by other classes too.

Image for postOutput of a public-access modifier

All members of a class are by default public in Python. These members can be accessed outside of the class, and their values can be modified too.

Protected Keyword

protected members of a class can be accessed by other members within the class and are also available to their subclasses.

No other entity can access these members. In order to do so, they can inherit the parent class. Python has a unique convention to make a member protected: Add a prefix _ (single underscore). This prevents its usage by outside entities unless it is a subclass.

Image for postOutput of protected-access modifier

However, this doesn?t fully perform the functionality of the protected modifier. The attribute defined in the above program is accessible outside the class scope. It can also be modified as well.

Image for postOutput of protected attribute modified

Private Keyword

The private members of a class are only accessible within the class. In Python, a private member can be defined by using a prefix __ (double underscore).

Image for postOutput of private- access modifier

So, in the private modifier?s case, we cannot access the attribute. So is a private modifier the way ahead?

The answer would be No

Image for post

Python performs name mangling on private attributes. Every member with a double underscore will be changed to _object._class__variable.

Image for postOutput of private attribute modified

Therefore, this proves Python provides you with access-modifiers functionality, but it can?t be compared to classical languages like C++ and Java. This practice entirely depends upon the programmer.

So a responsible programmer, upon seeing an attribute with such a naming convention, would refrain from accessing it outside its scope. This also wouldn?t be good to use in cases where fellow programmers aren?t aware of such naming conventions.

Do you think that python should have the entire functionality of access modifiers like C++ & Java? or Do you think it’s not that important?Leave your experiences and thoughts below!

18