When we deal with Python classes and objects, there we have different types of variables.
1. Instance Variables
These variables are also known as attributes and fields of an object. The instance variables are associated with the object of the class. The variables that we create using __init__() method is generally known as instance variables.
class Variables:
def __init__(self, a, b):
self.a = a #self.a is an instance variable
self.b = b # self.b is an instance variable
2. Local Variables
The variables that are limited for a class method are known as local variables. The scope of the local variables is limited to the method definition.
class Variables:
def new_variables(self):
a = 20 #a is a local variable
b = 30 #b is also a local variable
3. Parameters Variables
Parameters are the variables that are passed in the method. The parameters variables are similar to the local variable, and their scope is also limited to that particular method.
class Variables:
def new_variables(self,c,d):
a = c #c is a parameter variable
b = d #d is also a parameter variable
4. Class Variables
Class Variables are shared among all the objects of the class. A class variable can also be considered as a global variable for all the class methods.
class Variables:
a = 20 #a is a class variable
b = 30 #b is a also a class variable
In this Python tutorial, we will see what is an Instance Variable in Python and how to initialize & use it. By the end of this tutorial, you will be able to understand the following topics.
- What is an instance variable in Python?
- How to initialize/create and access an instance variable in Python.
- How to modify the value of an instance variable.
- How to add and delete an instance variable dynamically.
- What is the scope of an instance variable?
What is an instance variable in Python?
As the name suggests an instance variable is a variable that is associated with a particular instance or object(we can use the term instance and class object interchangeably, they both mean the same. A Class can have multiple instances or objects, and the value of instance variables may vary from one object to another.
How to create an instance variable?
To initialize or declare an instance variable we use the
self
keyword followed by the
.
operator and the variable name, such as
self.name
and
self.data
here
self
is the first argument value to the method that represents the instance of the object that is calling that method. We generally use the
Python constructor
or
__init__(self)
method to initialize the value of the instance variable for an instance.
Example
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
def show_detail(self):
print("Name:" ,self.name) #access instance variable inside the class
print("Salary", self.salary)
#e1 is the instance/object of class Employee
e1 = Employee("Rahul", 20000)
e1.show_detail()
print()
#e2 is another instance of class Employee
e2 = Employee("Kiran", 37984)
e2.show_detail()
Output
Name: Rahul
Salary 20000
Name: Kiran
Salary 37984
In the above example the variables
self.name
and
self.salary
are the instance variables. And the value of both the variables is dynamic, depending upon the instance.
Take Away Points
-
We can create instance variables with the help of the Python class
__init__()
method. -
When we create a new object of the class the values passed to the class name parameter goes to the
__init__()
method. -
Only those variables that are defined or declared inside the
__init__()
method using the self keyword are will be treated as instance variables because only those variables depend upon the instance or object of the class.
Ways to access the Instance Variables
There are two ways to access an instance variable
- Using the self (inside the class methods)
- Using the object name (outside the class)
Access the Instance variable within the class Instance Methods
To access the instance variable within the class we can use the
self
name followed by the dot operator and the variable name.
Example
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
def show_detail(self):
print("Name:" ,self.name) #access instance variable inside the method
print("Salary", self.salary)
#e1 is the instance/object of class Employee
e1 = Employee("Rahul", 20000)
e1.show_detail()
Output
Name: Rahul
Salary 20000
In every class’s instance method,
self
is the first parameter value, that represents the object that is calling that method.
Access the Instance variable outside the class Instance Methods
We can also access the instance variables outside the class using the object name. To access the instance variables outside the class we use the object name followed by dot operator then the variable name.
Example
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
#e1 and e2 are the instances/objects of class Employee
e1 = Employee("Rahul", 20000)
e2 = Employee("Kiran", 66000)
#access the instance variables outside the class
print("Employee 1:", e1.name)
print("Employee 2:", e2.name)
Note : While accessing the instance variable outside the class we do not need to specify the self , because self and the instance name are the same things.
How to modify the value of an instance variable
To modify the value of an instance variable we first need to access it using the instance (self, or instance name), then assign a new value to it.
Note: When we modify the value of an instance it will only affect the variable for that particular instance and have no effect on other instances.
Example
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
#e1 is the instance/object of class Employee
e1 = Employee("Rahul", 20000)
print("Employee 1 name before modification:", e1.name)
#modify the e1 object name instance variable
e1.name = "rahul sharma"
print("Employee 1 name after modification:", e1.name)
Output
Employee 1 name before modification: Rahul
Employee 1 name after modification: rahul sharma
In this example, we modified the instance variables using outside the class using the instance name. We can also modify the variables inside the class using the self.
Example
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
def edit_name(self,new_name):
self.name = new_name #modify instance variable
#e1 is the instance/object of class Employee
e1 = Employee("Rahul", 20000)
print("Employee 1 name before modification:", e1.name)
#modify the e1 object name instance variable
e1.edit_name("rahul sharma")
print("Employee 1 name after modification:", e1.name)
Output
Employee 1 name before modification: Rahul
Employee 1 name after modification: rahul sharma
Naming conventions for the Instance variables
The naming convention for instance variables is similar to the Python identifier or normal variables.
-
The name should be all lower case.
For example
age = 34
-
To separate the variable name should use the underscore character.
For example
user_salary= 343544
-
The private variable should start with a single underscore.
For example
_key = 3432
-
Use the double __ before the variable name for name mangaling(Python interpreter rewrites the name in such a way that it avoid conflict in the subclass).
For Example
__value = "some data"
How to add and delete an instance variable dynamically
By far we have been using the
__init__()
method to initialize instance variables. Now let’s discuss a new syntax to add a new instance variable dynamically outside the function.
Syntax
instanceName.new_instance_variable_name = value
Example
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
#the instance/object of class Employee
e1 = Employee("Rahul", 20000)
e2 = Employee("Jay", 34324)
#add a new instance variable for e1
e1.status = "Manager"
print("Employee 1 Status", e1.status)
#error
print("Employee 2 Status", e2.status)
Output
Employee 1 Status Manager
Traceback (most recent call last):
File "C:\Users\admin\AppData\Local\Programs\Python\Python310\main.py", line 18, in <module>
print("Employee 2 Status", e2.status)
AttributeError: 'Employee' object has no attribute 'status'
In this example, we are receiving the error for
e2.status
because there is no status attribute for the
e
2 object. We have only defined the
status
instance dynamically for the
e1
object. As status is a dynamic instance object it can only be accessed through the
e1
object.
Note:
- The dynamically added instance variable outside the class does not add the instance variable to the class but to the object only.
- After adding an instance variable to a specific instance its changes do not reflect on the other objects.
Dynamically delete the instance variable
To delete an instance for a specific instance or object we can either use the
del
keyword or the
delattr()
function
del
keyword can delete any Python object, and we can use it to delete the instance variable
Example
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
#the instance/object of class Employee
e1 = Employee("Rahul", 20000)
print("Before deleting the e1 salary variable", e1.salary)
#delete the e1.salary
del e1.salary
#error
print("after deleting the e1 salary variable", e1.salary)
Output
Before deleting the e1 salary variable 20000
Traceback (most recent call last):
File "C:\Users\admin\AppData\Local\Programs\Python\Python310\main.py", line 16, in <module>
print("after deleting the e1 salary variable", e1.salary)
AttributeError: 'Employee' object has no attribute 'salary'
delattr() function stands for delete attribute and using this inbuilt Python function we can delete the object instance variable.
Syntax
delattr(object_name, variable_name)
object_name
is the name of instance which attribute which we want to delete
varible_name
is the name of the instance variable that we want to delete
Example
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
#the instance/object of class Employee
e1 = Employee("Rahul", 20000)
print("Before deleting the e1 salary variable", e1.salary)
#delete the e1.salary
delattr(e1, salary)
#error
print("after deleting the e1 salary variable", e1.salary)
Output
Before deleting the e1 salary variable 20000
Traceback (most recent call last):
File "C:\Users\admin\AppData\Local\Programs\Python\Python310\main.py", line 13, in <module>
delattr(e1, salary)
NameError: name 'salary' is not defined
Scope of an Instance variable
The scope of an instance variable is limited to the class where it is defined. But in inheritance, the scope of the instance variable extends from one class to more. With the help of Python inheritance , we can access the instance variable of one class from another.
Example
class Car:
def __init__(self):
#instance variable of car class
self.wheels = 4
class BMW(Car):
def __init__(self, model):
#call the parent class
super().__init__()
self.model= model
def detail(self):
print("Car Model:", self.model)
print("Car wheels:", self.wheels) #access the Car wheel from BMW
bmw = BMW("BMW X3")
bmw.detail()
Output
Car Model: BMW X3
Car wheels: 4
How to list all the Instance variables of an Object?
Every class object comes with an inbuilt __dict__ property which returns a dictionary of all the instance variables available for an object.
Syntax
obj.__dict__
Example
class Car:
def __init__(self):
#instance variable of car class
self.wheels = 4
class BMW(Car):
def __init__(self, model):
#call the parent class
super().__init__()
self.model= model
def detail(self):
print("Car Model:", self.model)
print("Car wheels:", self.wheels) #access the Car wheel from BMW
bmw = BMW("BMW X3")
print("All instance variables of bmw", bmw.__dict__)
Output
All instance variables of bmw {'wheels': 4, 'model': 'BMW X3'}
Conclusion
In this Python tutorial, we discussed what is an instance variable in Python and how to initialize or create it. The instance variables defined in the class are controlled by the objects of the class. Every object of the class has a copy of its own instance variables. We can add, modify, delete and list all the instances variable of an object. To add a new instance variable we can use the object name with dot operator new instance variable name and assign a value to it. Similarly, we can access an instance variable using the object name. To delete the instance variable for a particular instance we can use
del
keyword or
delattr()
function. And finally, to list all the available instance variables for an object we can take the help of object
__dict__
property.
People are also reading:
- Python Instance Method
- Python Class Method with examples
- Flatten List & List of Lists in Python
- Python Class Variables
- Python Compile Regex Pattern using re.compile()
- Convert a List to Dictionary in Python
- Python Regex Replace Pattern in a string using re.sub()
- Python Regex Split String Using re.split()
- Tuple vs List in Python
- Python Dictionary Methods
Leave a Comment on this Post