Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Object Oriented Programming in Python | Set 2 (Data Hiding and Object Printing)

  • Difficulty Level : Easy
  • Last Updated : 07 Sep, 2021

Prerequisite: Object-Oriented Programming in Python | Set 1 (Class, Object and Members)

 
Data hiding 

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning - Basic Level Course

In Python, we use double underscore (Or __) before the attributes name and those attributes will not be directly visible outside. 



Python




class MyClass:
 
    # Hidden member of MyClass
    __hiddenVariable = 0
   
    # A member method that changes
    # __hiddenVariable
    def add(self, increment):
        self.__hiddenVariable += increment
        print (self.__hiddenVariable)
  
# Driver code
myObject = MyClass()    
myObject.add(2)
myObject.add(5)
 
# This line causes error
print (myObject.__hiddenVariable)

Output : 

2
7
Traceback (most recent call last):
  File "filename.py", line 13, in 
    print (myObject.__hiddenVariable)
AttributeError: MyClass instance has 
no attribute '__hiddenVariable' 

In the above program, we tried to access a hidden variable outside the class using an object and it threw an exception.
We can access the value of a hidden attribute by a tricky syntax: 

Python




# A Python program to demonstrate that hidden
# members can be accessed outside a class
class MyClass:
 
    # Hidden member of MyClass
    __hiddenVariable = 10
 
# Driver code
myObject = MyClass()    
print(myObject._MyClass__hiddenVariable)

Output : 

10

Private methods are accessible outside their class, just not easily accessible. Nothing in Python is truly private; internally, the names of private methods and attributes are mangled and unmangled on the fly to make them seem inaccessible by their given names [See this for source ]. 

 Printing Objects 

Printing objects give us information about objects we are working with. In C++, we can do this by adding a friend ostream& operator << (ostream&, const Foobar&) method for the class. In Java, we use toString() method.
In python, this can be achieved by using __repr__ or __str__ methods.

Python




class Test:
    def __init__(self, a, b):
        self.a = a
        self.b = b
 
    def __repr__(self):
        return "Test a:%s b:%s" % (self.a, self.b)
 
    def __str__(self):
        return "From str method of Test: a is %s," \
              "b is %s" % (self.a, self.b)
 
# Driver Code       
t = Test(1234, 5678)
print(t) # This calls __str__()
print([t]) # This calls __repr__()

Output : 

From str method of Test: a is 1234,b is 5678
[Test a:1234 b:5678]

Important Points about Printing: 

  • If no __str__ method is defined, print t (or print str(t)) uses __repr__. 

Python




class Test:
    def __init__(self, a, b):
        self.a = a
        self.b = b
 
    def __repr__(self):
        return "Test a:%s b:%s" % (self.a, self.b)
 
# Driver Code       
t = Test(1234, 5678)
print(t)

Output :

Test a:1234 b:5678
  • If no __repr__ method is defined then the default is used. 

Python




class Test:
    def __init__(self, a, b):
        self.a = a
        self.b = b
 
# Driver Code       
t = Test(1234, 5678)
print(t)

Output :

<__main__.Test instance at 0x7fa079da6710> 

This article is contributed by Shwetanshu Rohatgi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 




My Personal Notes arrow_drop_up
Recommended Articles
Page :