self in Python class (original) (raw)

Last Updated : 26 Feb, 2025

In Python, self is a fundamental concept when working with **object-oriented programming (OOP). It represents the instance of the class being used. Whenever we create an object from a class, self refers to the current object instance. It is essential for accessing attributes and methods within the class.

**Example:

Python `

class Mynumber: def init(self, value): self.value = value

def print_value(self):
    print(self.value)

obj1 = Mynumber(17) obj1.print_value()

`

What is the Purpose of “self”?

In Python, **self is used as the first parameter in instance methods to refer to the current object. It allows methods within the class to access and modify the object’s attributes, making each object independent of others.

When we call a method on an object, self automatically gets passed to the method, referring to the specific instance of the class the method is acting upon. Without self, Python wouldn’t know which instance’s attributes or methods to refer to.

The Role of “self” in Constructors and Methods

Self in the Constructor (__init__ method)

__init__ method is called when a new instance of the class is created. This method serves as the constructor for the class and initializes the object’s attributes. The first argument of the __init__ method must always be self, as it allows the method to set instance attributes for the object being created.

**Example:

Python `

class Subject:

def __init__(self, attr1, attr2):
    self.attr1 = attr1
    self.attr2 = attr2

obj = Subject('Maths', 'Science') print(obj.attr1)
print(obj.attr2)

`

**Explanation: In this example, **self.attr1 and **self.attr2 refer to the attributes of the current object, ensuring that each object can have its own values for these attributes.

Self in Instance Methods

Any method within the class that operates on an instance of the class must include self as the first parameter. It allows us to access the instance’s attributes and other methods.

**Example:

Python `

class Car: def init(self, model, color): self.model = model self.color = color

def show(self):
    print("Model is", self.model)
    print("Color is", self.color)

Creating instances of the class

audi = Car("Audi A4", "Blue") ferrari = Car("Ferrari 488", "Green")

Calling instance methods

audi.show()
ferrari.show()

`

Output

Model is Audi A4 Color is Blue Model is Ferrari 488 Color is Green

**Explanation: In this example, self allows each instance to retain its unique attributes, such as model and color and the show() method displays them.

Is “self” a Keyword?

Although self is not a Python keyword, using it is a widely accepted convention. This makes the code easier to read and understand for other developers, as it follows the general structure of object-oriented programming.

**Example:

Python `

class Car: def init(this, model, color): this.model = model this.color = color

def show(this):
    print("Model is", this.model)
    print("Color is", this.color)

using 'this' instead of 'self'

audi = Car("Audi A4", "Blue") audi.show()

`

Output

Model is Audi A4 Color is Blue

**Explanation: In this case, we use this instead of self. While this works, it’s better to stick to the self convention for readability and maintainability of the code.

Self: Pointer to the Current Object

When we create an instance of a class, self points to the current object. It allows us to refer to the instance’s attributes and methods. Every object created from a class will have its own self.

**Example:

Python `

class Check: def init(self): print("Address of self = ", id(self))

obj = Check() print("Address of class object = ", id(obj))

`

Output

Address of self = 140106994493696 Address of class object = 140106994493696

**Explanation: Here, self refers to the memory address of the object and we can use id(self) to see its unique memory address.

Creating Methods to Modify Class State Using “self”

Self allows us to modify the internal state of an object, such as updating instance attributes. This is useful when building methods that interact with or modify the object’s data.

**Example: Modifying the State of an Object

Python `

class Counter: def init(self): self.count = 0

def increment(self):
    self.count += 1

def decrement(self):
    self.count -= 1

def get_count(self):
    return self.count

using the Counter class

counter = Counter() counter.increment() counter.increment() counter.decrement() print(counter.get_count())

`

**Explanation: In this example, self.count keeps track of the counter’s state and the methods increment, decrement and **get_count modify or access the count.