Open In App

Private Methods in Python

Last Updated : 01 Jul, 2024
Comments
Improve
Suggest changes
Like Article
Like
Save
Share
Report
News Follow

Encapsulation is one of the fundamental concepts in object-oriented programming (OOP) in Python. It describes the idea of wrapping data and the methods that work on data within one unit. This puts restrictions on accessing variables and methods directly and can prevent the accidental modification of data. A class is an example of encapsulation as it encapsulates all the data that is member functions, variables, etc. Now, there can be some scenarios in which we need to put restrictions on some methods of the class so that they can neither be accessed outside the class nor by any subclasses. To implement this private methods come into play.

Private functions in Python

Consider a real-life example, a car engine, which is made up of many parts like spark plugs, valves, pistons, etc. No user uses these parts directly, rather they just know how to use the parts which use them. This is what private methods are used for. It is used to hide the inner functionality of any class from the outside world. Private methods are those methods that should neither be accessed outside the class nor by any base class. In Python, there is no existence of Private methods that cannot be accessed except inside a class. However, to define a private method prefix the member name with the double underscore__”. Note: The __init__ method is a constructor and runs as soon as an object of a class is instantiated. 

Python
# Creating a Base class
class Base:

    # Declaring public method
    def fun(self):
        print("Public method")

    # Declaring private method
    def __fun(self):
        print("Private method")

# Creating a derived class


class Derived(Base):
    def __init__(self):

        # Calling constructor of
        # Base class
        Base.__init__(self)

    def call_public(self):

        # Calling public method of base class
        print("\nInside derived class")
        self.fun()

    def call_private(self):

        # Calling private method of base class
        self.__fun()


# Driver code
obj1 = Base()

# Calling public method
obj1.fun()

obj2 = Derived()
obj2.call_public()

# Uncommenting obj1.__fun() will
# raise an AttributeError

# Uncommenting obj2.call_private()
# will also raise an AttributeError

Output:

Public method

Inside derived class
Public method
Traceback (most recent call last):
File "/home/09d6f91fdb63d16200e172c7a925dd7f.py", line 43, in
obj1.__fun()
AttributeError: 'Base' object has no attribute '__fun'

Traceback (most recent call last):
File "/home/0d5506bab8f06cb7c842501d9704557b.py", line 46, in
obj2.call_private()
File "/home/0d5506bab8f06cb7c842501d9704557b.py", line 32, in call_private
self.__fun()
AttributeError: 'Derived' object has no attribute '_Derived__fun'

The above example shows that private methods of the class can neither be accessed outside the class nor by any base class. However, private methods can be accessed by calling the private methods via public methods. 

Example: 

Python
# Creating a class
class A:

    # Declaring public method
    def fun(self):
        print("Public method")

    # Declaring private method
    def __fun(self):
        print("Private method")

    # Calling private method via
    # another method
    def Help(self):
        self.fun()
        self.__fun()


# Driver's code
obj = A()
obj.Help()

Output:

Public method
Private method

Name mangling

Python provides a magic wand that can be used to call private methods outside the class also, it is known as name mangling. It means that any identifier of the form __geek (at least two leading underscores or at most one trailing underscore) is replaced with _classname__geek, where the class name is the current class name with a leading underscore(s) stripped. 

Example: 

Python
# Creating a class
class A:

    # Declaring public method
    def fun(self):
        print("Public method")

    # Declaring private method
    def __fun(self):
        print("Private method")


# Driver's code
obj = A()

# Calling the private member
# through name mangling
obj._A__fun()

Output:

Private method

Private Methods in Python – FAQs

Can private methods be accessed outside their class?

Private methods in Python are designed to be inaccessible from outside the class where they are defined. They are prefixed with a double underscore (e.g., __private_method). However, Python does not enforce strict access controls, so these methods can still be accessed using name mangling.

Name mangling works by changing the method’s name to include the class name. For example, a private method named __private_method in a class MyClass will be mangled to _MyClass__private_method. This can be accessed from outside the class, but it is generally discouraged as it goes against the intended encapsulation.

Example:

class MyClass:
def __private_method(self):
return 'Private method'

obj = MyClass()
print(obj._MyClass__private_method()) # Output: Private method

How to call a private method from within the same class?

To call a private method from within the same class, you use the method’s name with the double underscore prefix. This is straightforward and allows you to utilize the private method for internal class operations.

Example:

class MyClass:
def __private_method(self):
return 'Private method called from within the class'

def public_method(self):
return self.__private_method() # Accessing the private method

obj = MyClass()
print(obj.public_method()) # Output: Private method called from within the class

What is the difference between private and protected methods?

  • Private Methods:
    • Indicated by a double underscore prefix (__private_method).
    • Intended to be used only within the class where they are defined.
    • They are subject to name mangling, which changes their name to include the class name, making it harder to accidentally access them from outside the class.
  • Protected Methods:
    • Indicated by a single underscore prefix (_protected_method).
    • Intended for use within the class and its subclasses. It is a convention to indicate that these methods should not be accessed from outside the class.
    • There is no name mangling; this is a hint to developers, not a strict rule.

Can private methods be inherited in Python?

Yes, private methods can be inherited in Python. Even though private methods are meant to be used only within the class, they still exist in the class’s namespace and can be inherited by subclasses. However, these methods are not meant to be accessed directly from the subclass.

If you want to use private methods from a subclass, you need to access them through name mangling, but this is generally not recommended as it breaks encapsulation principles.

Example:

class BaseClass:
def __private_method(self):
return 'This is a private method'

class DerivedClass(BaseClass):
def call_private(self):
return self._BaseClass__private_method() # Accessing private method via name mangling

obj = DerivedClass()
print(obj.call_private()) # Output: This is a private method

How does name mangling work with private methods?

Name mangling is a mechanism used to make private methods and attributes harder to access from outside the class. When you define a method with a double underscore prefix, Python automatically changes the method’s name to include the class name. This makes it less likely that you will accidentally access or override these methods.

For a method named __private_method in a class MyClass, Python converts it to _MyClass__private_method.

Here’s how name mangling affects method names:

  • Definition: def __private_method(self):
  • Mangled Name: _MyClass__private_method

This feature allows the method to be accessed from outside the class by explicitly using the mangled name, but it is generally best to avoid accessing private methods in this way to respect the intended encapsulation.

Example:

class MyClass:
def __private_method(self):
return 'This is a private method'

# Access private method from outside the class using name mangling
obj = MyClass()
print(obj._MyClass__private_method()) # Output: This is a private method


    Similar Reads

    Is __init__() a private method in Python?
    Here in this article we are going to find out whether __init__() in Python is actually private or not. So we might come across many questions like What actually is __init__() method?What actually are private methods?And, if __init__() is private then how can we access it outside of a class? We have already heard about the concept that private metho
    3 min read
    Access Modifiers in Python : Public, Private and Protected
    Prerequisites: Underscore (_) in Python, Private Variables in Python Various object-oriented languages like C++, Java, and Python control access modifications which are used to restrict access to the variables and methods of the class. Most programming languages have three forms of access modifiers, which are Public, Protected and Private in a clas
    5 min read
    Private Variables in Python
    Prerequisite: Underscore in PythonIn Python, there is no existence of “Private” instance variables that cannot be accessed except inside an object. However, a convention is being followed by most Python code and coders i.e., a name prefixed with an underscore, For e.g. _geek should be treated as a non-public part of the API or any Python code, whet
    3 min read
    Python String Methods | Set 1 (find, rfind, startwith, endwith, islower, isupper, lower, upper, swapcase & title)
    Some of the string basics have been covered in the below articles Strings Part-1 Strings Part-2 The important string methods will be discussed in this article1. find("string", beg, end) :- This function is used to find the position of the substring within a string.It takes 3 arguments, substring , starting index( by default 0) and ending index( by
    4 min read
    Python String Methods | Set 2 (len, count, center, ljust, rjust, isalpha, isalnum, isspace & join)
    Some of the string methods are covered in the set 3 below String Methods Part- 1 More methods are discussed in this article 1. len() :- This function returns the length of the string. 2. count("string", beg, end) :- This function counts the occurrence of mentioned substring in whole string. This function takes 3 arguments, substring, beginning posi
    4 min read
    Python String Methods | Set 3 (strip, lstrip, rstrip, min, max, maketrans, translate, replace & expandtabs())
    Some of the string methods are covered in the below sets.String Methods Part- 1 String Methods Part- 2More methods are discussed in this article1. strip():- This method is used to delete all the leading and trailing characters mentioned in its argument.2. lstrip():- This method is used to delete all the leading characters mentioned in its argument.
    4 min read
    List Methods in Python | Set 1 (in, not in, len(), min(), max()...)
    List methods are discussed in this article. 1. len() :- This function returns the length of list. List = [1, 2, 3, 1, 2, 1, 2, 3, 2, 1] print(len(List)) Output: 10 2. min() :- This function returns the minimum element of list. List = [2.3, 4.445, 3, 5.33, 1.054, 2.5] print(min(List)) Output: 1.054 3. max() :- This function returns the maximum eleme
    2 min read
    Accessing Attributes and Methods in Python
    Attributes of a class are function objects that define corresponding methods of its instances. They are used to implement access controls of the classes. Attributes of a class can also be accessed using the following built-in methods and functions : getattr() - This function is used to access the attribute of object. hasattr() - This function is us
    3 min read
    Python | Float type and its methods
    The float type in Python represents the floating point number. Float is used to represent real numbers and is written with a decimal point dividing the integer and fractional parts. For example, 97.98, 32.3+e18, -32.54e100 all are floating point numbers. Python float values are represented as 64-bit double-precision values. The maximum value any fl
    3 min read
    Bound, unbound, and static methods in Python
    Methods in Python are like functions except that it is attached to an object.The methods are called on objects and it possibly make changes to that object. These methods can be Bound, Unbound or Static method. The static methods are one of the types of Unbound method. These types are explained in detail below. Bound methods If a function is an attr
    5 min read
    Http Request methods - Python requests
    Python requests module has several built-in methods to make Http requests to specified URI using GET, POST, PUT, PATCH or HEAD requests. A Http request is meant to either retrieve data from a specified URI or to push data to a server. It works as a request-response protocol between a client and server. A web browser may be the client, and an applic
    7 min read
    Response Methods - Python requests
    When one makes a request to a URI, it returns a response. This Response object in terms of python is returned by requests.method(), method being - get, post, put, etc. Response is a powerful object with lots of functions and attributes that assist in normalizing data or creating ideal portions of code. For example, response.status_code returns the
    5 min read
    Accessor and Mutator methods in Python
    In Python, class is a prototype for objects which is a user-defined type. It specifies and defines objects of the same type, a class includes a cluster of data and method definitions. Moreover, an object is a single instance of a class but you can create many objects from a single class.Note: For more information, refer to Python Classes and Object
    3 min read
    10 Python File System Methods You Should Know
    While programming in any language, interaction between the programs and the operating system (Windows, Linux, macOS) can become important at some point in any developer's life. This interaction may include moving files from one location to another, creating a new file, deleting a file, etc. In this article, we will discuss 10 essential file system
    6 min read
    Element methods in Selenium Python
    Selenium’s Python Module is built to perform automated testing with Python. Selenium in Python works with elements. An element can be a tag, property, or anything, it is an instance of class selenium.webdriver.remote.webelement.WebElement. After you find an element on screen using selenium, you might want to click it or find sub-elements, etc. Sele
    3 min read
    Web Driver Methods in Selenium Python
    Selenium’s Python Module is built to perform automated testing with Python. Selenium Python bindings provides a simple API to write functional/acceptance tests using Selenium WebDriver. To open a webpage using Selenium Python, checkout – Navigating links using get method – Selenium Python. Just being able to go to places isn’t terribly useful. What
    5 min read
    Methods of Ordered Dictionary in Python
    An OrderedDict is a dict that remembers the order in that keys were first inserted. If a new entry overwrites an existing entry, the original insertion position is left unchanged. Deleting an entry and reinserting it will move it to the end. Ordered dictionary somehow can be used in the place where there is a use of hash Map and queue. It has chara
    3 min read
    Customize your Python class with Magic or Dunder methods
    The magic methods ensure a consistent data model that retains the inherited feature of the built-in class while providing customized class behavior. These methods can enrich the class design and can enhance the readability of the language. So, in this article, we will see how to make use of the magic methods, how it works, and the available magic m
    13 min read
    Subclass and methods of Shelve class in Python
    Shelve is a module in Python's standard library which can be used as a non-relational database. The key difference between a dbm and shelve is that shelve can serve its values as any arbitrary object which can be handled by pickle module while in dbm database we can only have standard datatypes of Python as its database values. The key in shelve is
    4 min read
    Advanced Python List Methods and Techniques
    Lists are just like dynamically sized arrays, declared in other languages (vector in C++ and ArrayList in Java). Lists need not be homogeneous always which makes it a most powerful tool in Python. A single list may contain DataTypes like Integers, Strings, as well as Objects. Lists are mutable, and hence, they can be altered even after their creati
    6 min read
    Python Tuple Methods
    Python Tuples is an immutable collection of that are more like lists. Python Provides a couple of methods to work with tuples. In this article, we will discuss these two methods in detail with the help of some examples. Count() MethodThe count() method of Tuple returns the number of times the given element appears in the tuple. Syntax: tuple.count(
    3 min read
    Python Set Methods
    A Set in Python is a collection of unique elements which are unordered and mutable. Python provides various functions to work with Set. In this article, we will see a list of all the functions provided by Python to deal with Sets. Adding and Removing elementsWe can add and remove elements form the set with the help of the below functions - add(): A
    2 min read
    Python Input Methods for Competitive Programming
    Python is an amazingly user-friendly language with the only flaw of being slow. In comparison to C, C++, and Java, it is quite slower. In online coding platforms, if the C/C++ limit provided is x. Usually, in Java time provided is 2x, and in Python, it's 5x. To improve the speed of code execution for input/output intensive problems, languages have
    6 min read
    List Methods in Python | Set 2 (del, remove(), sort(), insert(), pop(), extend()...)
    Some of the list methods are mentioned in set 1 below List Methods in Python | Set 1 (in, not in, len(), min(), max()…) More methods are discussed in this article. 1. del[a : b] :- This method deletes all the elements in range starting from index 'a' till 'b' mentioned in arguments. 2. pop() :- This method deletes the element at the position mentio
    4 min read
    Analysis of Different Methods to find Prime Number in Python
    If you participate in competitive programming, you might be familiar with the fact that questions related to Prime numbers are one of the choices of the problem setter. Here, we will discuss how to optimize your function which checks for the Prime number in the given set of ranges, and will also calculate the timings to execute them. Going by defin
    7 min read
    Define and Call Methods in a Python Class
    In object-oriented programming, a class is a blueprint for creating objects, and methods are functions associated with those objects. Methods in a class allow you to define behavior and functionality for the objects created from that class. Python, being an object-oriented programming language, provides a straightforward syntax for defining and cal
    3 min read
    Python List methods
    Python List Methods are the built-in methods in lists used to perform operations on Python lists/arrays. Below, we've explained all the Python list methods you can use with Python lists, for example, append(), copy(), insert(), and more. List Methods in PythonLet's look at some different list methods in Python for Python lists: S.noMethodDescriptio
    6 min read
    Python Dictionary Methods
    Python dictionary methods is collection of Python functions that operates on Dictionary. Python Dictionary is like a map that is used to store data in the form of a key: value pair. Python provides various built-in functions to deal with dictionaries. In this article, we will see a list of all the functions provided by Python to work with dictionar
    5 min read
    Bound methods python
    A bound method is the one which is dependent on the instance of the class as the first argument. It passes the instance as the first argument which is used to access the variables and functions. In Python 3 and newer versions of python, all functions in the class are by default bound methods. Let's understand this concept with an example: [GFGTABS]
    4 min read
    Python String Methods
    Python string methods is a collection of in-built Python functions that operates on lists. Note: Every string method in Python does not change the original string instead returns a new string with the changed attributes. Python string is a sequence of Unicode characters that is enclosed in quotation marks. In this article, we will discuss the in-bu
    6 min read
    Practice Tags :