DEV Community

Shameel Uddin
Shameel Uddin

Posted on • Originally published at blog.hasab.tech

Instance Variables and Instance Methods in Python

In Object-Oriented Programming (OOP), two of the most important concepts are:

  • Instance Variables
  • Instance Methods

If you don’t understand these properly, OOP will always feel confusing.

So let’s break everything down step by step in the simplest way possible.

Let’s Start with a Simple Real-Life Example

Imagine a classroom. Learn How Instance Variables and Methods Actually Work in Python

You (teacher) are the class blueprint.
Your students are objects.

Every student:

  • Has a name
  • Has a roll number
  • Has marks
  • Can perform actions (submit homework, give test, etc.)

Now here’s the important part:

Even though all students come from the same class,
each student has their own data.

That “own data” is exactly what we call:

Instance Variables

And the actions they perform?

Instance Methods

What is an Instance Method in Python?

An instance method is a method that belongs to an object and works on that specific object.

Definition (Simple Words)

An instance method:

  • Is defined inside a class
  • Has self as its first parameter
  • Can access and modify instance variables

Why Do We Need self?

When we create multiple objects from a class, each object has its own data.

self tells Python:

Work with the current object that is calling this method

Example

class User:
    def activate(self):
        self.is_active = True

Enter fullscreen mode Exit fullscreen mode

If we create two objects:

user1 = User()
user2 = User()


Enter fullscreen mode Exit fullscreen mode

When we call

user1.activate()

Enter fullscreen mode Exit fullscreen mode

Python automatically does this internally:

User.activate(user1)

Enter fullscreen mode Exit fullscreen mode

That means:

self = user1
So instance methods always operate on the object that calls them

What is an Instance Variable in Python?

An instance variable is a variable that belongs to a specific object.

It is created using:

self.variable_name = value

Enter fullscreen mode Exit fullscreen mode

Important Concept

Instance variables:

  • Store data
  • Are unique for each object
  • Exist inside the object
  • Can be different for different objects Example
def set_email(self, email):
    self.email = email

Enter fullscreen mode Exit fullscreen mode

When we call:

user1.set_email("shameel@hasabtech.com")

Enter fullscreen mode Exit fullscreen mode

It becomes:

user1.email = "shameel@hasabtech.com"

Enter fullscreen mode Exit fullscreen mode

Now email belongs only to user1.

If we check user2, it still does NOT have email until we set it.

That is why instance variables are object-specific.

Complete Example with Deep Explanation

Let’s build a proper example and understand what happens step by step.

class User:

    def activate(self):
        self.is_active = True

    def deactivate(self):
        self.is_active = False

    def set_email(self, email):
        self.email = email

    def show_status(self):
        print(f"{self.email} is {'active' if self.is_active else 'not active'}")

Enter fullscreen mode Exit fullscreen mode

Step 1: Creating Objects (Instances)

user1 = User()
user2 = User()

Enter fullscreen mode Exit fullscreen mode

When we execute this:

  • Python creates two separate objects in memory
  • Each object has its own space to store data
  • Both objects have access to all instance methods

Important: Object and Instance mean the same thing.

What Happens Inside Memory?

Even though both objects come from the same class blueprint:

  • user1 has its own data storage
  • user2 has its own data storage

They do NOT share instance variables.

This is the beauty of OOP.

Understanding Instance Methods in Action

Now let’s call:

user1.set_email("shameel@hasabtech.com")

Enter fullscreen mode Exit fullscreen mode

What happens?

  1. Python sees user1
  2. It passes user1 automatically as self
  3. Inside method:
self.email = email

Enter fullscreen mode Exit fullscreen mode

Becomes

user1.email = "shameel@hasabtech.com"


Enter fullscreen mode Exit fullscreen mode

Now:

  • user1 has email
  • user2 still has nothing

This proves instance variables belong to objects.

Adding More Data to Objects

Now:

user1.activate()
user2.deactivate()

Enter fullscreen mode Exit fullscreen mode

This creates:

user1.is_active = True
user2.is_active = False


Enter fullscreen mode Exit fullscreen mode

Again:

  • Each object has its own is_active
  • They are completely independent

This independence is the core idea of instance variables.

Why Methods are Called Instance Methods?

Because they:

  • Work with instance variables
  • Depend on the object
  • Use self to access object data

For example:

def show_status(self):
    print(f"{self.email} is {'active' if self.is_active else 'not active'}")

Enter fullscreen mode Exit fullscreen mode

This method:

  • Reads self.email
  • Reads self.is_active
  • Prints data of that specific object

So this method behaves differently for each object.

That’s why it is called an instance method.

Common Beginner Confusion

Many students think:
Is self a keyword?
No.

self is just a naming convention.

You can write:

def activate(myobject):

Enter fullscreen mode Exit fullscreen mode

def activate(myobject):

But by convention, we always write self

Why This Concept is Very Important?

If you understand instance variables and instance methods, you can:

  • Build login systems
  • Create user management systems
  • Understand Django models
  • Work with APIs
  • Design real-world applications

Without understanding self, OOP will feel complicated.

Final Understanding

Whenever:

  • You attach data using self → It becomes an instance variable.
  • You define a method with self → It becomes an instance method.

Each object:

  • Has its own data
  • Shares method structure
  • Behaves independently

Summary

  • Object = Instance. They mean the same thing.
  • Instance Variables are the "adjectives" (data) that describe the object.
  • Instance Methods are the "verbs" (actions) the object can perform.
  • self is the bridge that connects the method to the specific object’s data.
  • Each object has its own copy of instance variables

Stay connected with hasabTech for more information:
Website | Facebook | LinkedIn | YouTube | X (Twitter) | TikTok

Top comments (0)