Access Modifiers in Python : Public, Private and Protected (original) (raw)

Last Updated : 19 Mar, 2026

Access modifiers in Python control which parts of a class can be accessed from outside the class, from within the class, or by subclasses. They help control how data and methods are accessed and used.

Types of Access Modifiers

1. Public Access Modifier

class Geek: def init(self, name, age): self.geekName = name
self.geekAge = age
def displayAge(self):
print("Age:", self.geekAge)

obj = Geek("R2J", 20)

print("Name:", obj.geekName) obj.displayAge()

`

**Explanation:

2. Protected Access Modifier

class Student: def init(self, name, roll, branch): self._name = name
self._roll = roll
self._branch = branch

def _displayRollAndBranch(self): 
    print("Roll:", self._roll)
    print("Branch:", self._branch)

class Geek(Student): def displayDetails(self): print("Name:", self._name)
self._displayRollAndBranch()

obj = Geek("R2J", 1706256, "IT") obj.displayDetails()

`

Output

Name: R2J Roll: 1706256 Branch: IT

E**xplanation:

3. Private Access Modifier

**Note: A name like __age__ (double underscores at both start and end) is not private. It is treated as a special 'dunder' name in Python and name mangling does not apply to it.

Python `

class Geek: def init(self, name, roll, branch): self.__name = name
self.__roll = roll
self.__branch = branch

def __displayDetails(self):     
    print("Name:", self.__name)
    print("Roll:", self.__roll)
    print("Branch:", self.__branch)

def accessPrivateFunction(self):
    self.__displayDetails()    

obj = Geek("R2J", 1706256, "CSE") obj.accessPrivateFunction() print(obj._Geek__name)

`

Output

Name: R2J Roll: 1706256 Branch: CSE R2J

**Explanation:

Using All Access Modifiers

This program shows public, protected and private members in one example. It demonstrates how each type is accessed inside the class, in a subclass and from outside the class.

Python `

class Super: publicData = "Public Data Member" _protectedData = "Protected Data Member" __privateData = "Private Data Member"

def accessPrivateMembers(self):
    print("Accessing inside class:", self.__privateData)

class Sub(Super): def accessProtectedMembers(self): print("Accessing inside subclass:", self._protectedData)

obj = Sub()

print(obj.publicData) print(obj._protectedData) obj.accessPrivateMembers() print(obj._Super__privateData)

`

Output

Public Data Member Protected Data Member Accessing inside class: Private Data Member Private Data Member

**Explanation: