Home » Posts tagged 'Python class design'
Tag Archives: Python class design
Data Hiding
In this tutorial, We are going to learn Data Hiding in python.
In Python, data hiding refers to the concept of making certain attributes or methods of a class inaccessible from outside the class. This is done to encapsulate the internal implementation details of a class and to prevent direct modification or access to sensitive data.
There are two main ways to achieve data hiding in Python: name mangling and convention-based hiding.
1.Name Mangling: Name mangling is a technique that prefixes the name of an attribute with double underscores (__). When Python encounters a double underscore prefix, it automatically modifies the attribute name to include the class name as a prefix. This makes the attribute effectively hidden from outside the class, although it can still be accessed using the mangled name.
Here’s an example:
class MyClass:
def __init__(self):
self.__hidden_attribute = 42
def __hidden_method(self):
print("This is a hidden method.")
obj = MyClass()
print(obj._MyClass__hidden_attribute) # Accessing the hidden attribute
obj._MyClass__hidden_method() # Calling the hidden method
Output:
42
This is a hidden method.
Note that using name mangling does not completely prevent access to the hidden attributes or methods, but it serves as a convention to discourage direct access.
2. Convention-Based Hiding: Python does not enforce strict visibility rules like some other languages. Instead, it relies on conventions to indicate the intended visibility of attributes and methods. By convention, a single underscore (_) prefix is used to indicate that an attribute or method should be considered private or hidden.
Here’s an example:
class MyClass:
def __init__(self):
self._hidden_attribute = 42
def _hidden_method(self):
print("This is a hidden method.")
obj = MyClass()
print(obj._hidden_attribute) # Accessing the hidden attribute
obj._hidden_method() # Calling the hidden method
Output:
42
This is a hidden method.
Convention-based hiding is more lenient and relies on the developers’ understanding and agreement to respect the convention.
It’s important to note that data hiding in Python is not meant to provide strict access control, but rather to indicate the intended visibility of attributes and methods. Python encourages developers to follow the principle of “we are all consenting adults here,” trusting that they will respect the intended conventions.