Featured

    Featured Posts

Python OOPS Tutorial 6:Types Of Variable(Instance & Static & Local Varaible)


Types of Variables:

§  Inside Python class 3 types of variables are allowed.
   1.     Instance Variables (Object Level Variables)
   2.     Static Variables (Class Level Variables)
   3.     Local variables (Method Level Variables)
1. Instance Variables:

§  If the value of a variable is varied from object to object, then such type of variables is    called instance variables.  
§  For every object a separate copy of instance variables will be created. 
§  Instance variable is an object level variable.
Where and How we can declare Instance variables:
1. We can declare instance variable Inside Constructor by using self-variable
2. We can declare instance variable Inside Instance Method by using self-variable.
3. We can declare instance variable Outside of the class by using object reference  
     Variable
1.     Inside Constructor by using self-variable:
      §  We can declare instance variables inside a constructor by using self-keyword. 
        Once we create object, automatically these variables will be added to the object.


class Student:
    def __init__(self):
        self.name="Scott"
        self.rollno=101
        self.age=20           


#Create an Object         

s1=Student()

print(s1.__dict__)


Output:
{'name': 'Scott', 'rollno': 101, 'age': 20}

2. Inside Instance Method by using self-variable:
 §   We can also declare instance variables inside instance method by using self-  
       variable. If any instance variable declared inside instance method, that instance 
       variable will be added once we call that method.




Example:


class Demo:

    def __init__(self):

        self.a=10
        self.b=20

    def f1(self):
        self.c=30

# instantiate the Demo class
d1=Demo()
print(d1.__dict__)
d1.f1()
print(d1.__dict__)

OutPut:
{'a': 10, 'b': 20}
{'a': 10, 'b': 20, 'c': 30}


3. Outside of the class by using object reference variable:  

  §     We can also add instance variables outside of a class to a particular object. 


Example:
class Demo:
    def __init__(self):
        self.a=10
        self.b=20
   
    def f1(self):
        self.c=30

# instantiate the Demo class
d1=Demo()
print(d1.__dict__)
d1.f1()
print(d1.__dict__)
d1.d=40
print(d1.__dict__)

OutPut:
{'a': 10, 'b': 20}
{'a': 10, 'b': 20, 'c': 30}
{'a': 10, 'b': 20, 'c': 30, 'd': 40}


 v How We can access Instance variables With-in Class and Outside the class:

  §  We can access instance variables with in the class by using self-variable and  
           outside of the class by using object reference.

class Demo:
    def __init__(self):
        self.a=10
        self.b=20
    # With-in Class We can access instance variable by Using self variable
    def info(self):
        print("a= ",self.a)
        print("b= ",self.b)

# instantiate the Demo class
d1=Demo()
d1.info()
print("=============================")
#Outside the class instance variable, we can access by Using reference variable
print("a= ",d1.a)
print("b= ",d1.b)

Output: -
a= 10
b= 20
=============================
a= 10
b= 20




 v How We can delete Instance variables With-in Class and Outside the class:
 §  We can delete instance variable by using del kwd. 
 §  We can delete instance variable With-in class as follows
              del self.variableName
 §  We can delete instance variable outside of class as follows
         del objectreference.variableName

class Demo:
    def __init__(self):
        self.a=10
        self.b=20
        self.c=30
        self.d=40
        self.e=50
    def removeA(self):
        del self.a

# instantiate the Demo class
d1=Demo()
print(d1.__dict__)
d1.removeA()
print(d1.__dict__)

Output:
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}
{'b': 20, 'c': 30, 'd': 40, 'e': 50}


class Demo:
    def __init__(self):
        self.a=10
        self.b=20
        self.c=30
        self.d=40
        self.e=50

# instantiate the Demo class
d1=Demo()
print(d1.__dict__)
del d1.a
print(d1.__dict__)
Output:
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}
{'b': 20, 'c': 30, 'd': 40, 'e': 50}


Note: -

  §  The instance variables which are deleted from one object, will not be deleted from 
           other objects because for each object a separate copy will be maintained.


class Demo:
    def __init__(self):
        self.a=10
        self.b=20
        self.c=30
        self.d=40
        self.e=50

# instantiate the Demo class
d1=Demo() 
d2=Demo()
print(d1.__dict__)
print(d2.__dict__)
print("========================================")
del d1.a
print(d1.__dict__)
print(d2.__dict__)

Output:
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}
===============================================
{'b': 20, 'c': 30, 'd': 40, 'e': 50}
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}

Note:-


 §  For instance, variable a separate copy will be maintained for every object. 

       if we are change the value of instance variables of one object then those 
       change will not be reflected to the remaining object of that class.
class Demo:
    def __init__(self):
        self.a=10
        self.b=20
        
# instantiate the Demo class
d1=Demo()
print("Before changing d1 => ",d1.a,d1.b)
d1.a=30
d1.b=40

d2=Demo()
print("For d2=> ",d2.a,d2.b)
print("===================================")
print("After changing d1 => ",d1.a,d1.b)
print("For d2=> ",d2.a,d2.b)

Output
Before changing d1 =>  10 20
For d2=>  10 20
===================================
After changing d1 =>  30 40
For d2=>  10 20

Static variable In Python

 §  Static variable is used for fulfil the common requirement. For Example, company  
       name of employees, college name of students etc. Name of the college is common for 
       all students.

When and why we use static variable
§  Suppose we want to store record of all employee of any company, in this case 
   employee id is unique for every employee but company name is common for all.

§  When we create a static variable as a company name then only once memory is 
   allocated otherwise it allocate a memory space each time for every employee.

Static variable
  §  If the value of a variable is not varied from object to object then it is never 
           recommended to declare that variable at object Level, we have to declare such type 
           variable of variables at class level.

  §  In the case of instance variable for every object a separate copy will be created.  
           but  In the case of static variable only one copy will be created at class level and 
           share that copy for every object of the class.

  §  static variable will be created at the time of class Loading & destroy at the time of 
          class unloading. Hence the scope of the static variable is exactly same as the scope 
          of the class
 Note-
§  If the value of a variable is varied from object to object then we should go for 
   instance variable. In the case of instance variable for every object a separate copy 
   will be created.

§  If the value of a variable is same from all object then we should go for static 
  variable.  In the case of static variable only one copy will be created at class level and
  share that copy for every object of the class.


Where and how we can declare variable as static variable with-in class
                   .
 §  Static variables we can declare with in the class directly but outside of any method or 
       block or constructor.




class Student:
    college_name='ITM'

    def __init__(self,rollno,name):
        self.rollno=rollno
        self.name=name

 §  This class has two instances and one static variable.

 §  Static variables we can declare also inside constructor by using class name


class Student:
    def __init__(self,rollno,name):
        Student.college_name='ITM'
        self.rollno=rollno
        self.name=name

 §  Static variables we can declare also inside instance method by using class name 

class Student:
    def __init__(self,rollno,name):
        self.rollno=rollno
        self.name=name

    def m1(self):
        Student.college_name='ITM'

 §  Static variables we can declare also Inside classmethod by using either class 
       name or cls variable.

class Student:
    def __init__(self,rollno,name):
        self.rollno=rollno
        self.name=name
    @classmethod   
    def m1(cls):
        cls.college_name='ITM'
        Student.college_name='ITM'


 §  Static variables we can declare also Inside static method by using class name
class Student:
    def __init__(self,roll_no,name):
        self.roll_no=roll_no
        self.name=name
    @staticmethod
    def m1(self):
        Student.college_Name="ITM"

How we can access static variable

 §  We can access static variable inside constructor by using either self or classname
class Student:
    college_Name="ITM"
    def __init__(self):
        #acessing static variable using self inside constructor
        print(self.college_Name)
        #acessing static variable using ClassName inside constructor
        print(Student.college_Name)

# instantiate the Student class
s1=Student()


 v We can access static variable  inside instance method:  by using either self or 
        classname
class Student:
    college_Name="ITM"
    def m1(self):
        #acessing static variable using self inside Instance Method
        print(self.college_Name)
        #acessing static variable using ClassName inside Instance Method
        print(Student.college_Name)

# instantiate the Student class
s1=Student()
s1.m1()

 v We can access static variable  inside class method: by using either cls variable  
         or  classname


class Student:
    college_Name="ITM"

    @classmethod
    def m1(cls):
        #acessing static variable using cls inside class Method
        print(cls.college_Name)
        #acessing static variable using ClassName inside class Method
        print(Student.college_Name)

# instantiate the Student class
s1=Student()
s1.m1()



 v We can access static variable inside static method: by using classname


class Student:
    college_Name="ITM"

    @staticmethod
    def m1():
        #acessing static variable using ClassName inside static Method
        print(Student.college_Name)

# instantiate the Student class 
s1=Student()
s1.m1()

 v We can access static variable From outside of class: by using either object 
        reference or classname

class Student:
    college_Name="ITM"
    
# instantiate the Student class
s1=Student()
#acessing static variable using ClassName Outside the class
print(Student.college_Name)
#acessing static variable using object reference Outside the class
print(s1.college_Name)


How and Where We can modify the static variable

 §  If you have created both the instance and static variables with the same name, then if 
       the variable is accessed from the reference variable outside the class, then the instance
       variable will be accessible, in this case static will not be accessible using reference 
       variable. then we can access static variable outside the class by using class name.




 v We can modify static variable inside constructor using className


class Student:
    college_Name="ITM"

    def __init__(self):
        Student.college_Name="IIT"

# instantiate the Student class 
s1=Student()
#acessing static variable using ClassName Outside the class
print(Student.college_Name)#The Output:IIT
#acessing static variable using object reference Outside the class
print(s1.college_Name)#The Output:IIT

 v  We can modify static variable inside staticMethod using className
class Student:
    college_Name="ITM"
   
    @staticmethod
    def m1():
        Student.college_Name="IIT"
   
# instantiate the Student class
s1=Student()
#acessing static variable using ClassName Outside the class
print(Student.college_Name)#the output:ITM
#acessing static variable using object reference Outside the class
print(s1.college_Name)#the output:ITM
s1.m1()
print("After modifying static variable through static Method")
#acessing static variable using ClassName Outside the class
print(Student.college_Name)#the output:IIT
#acessing static variable using object reference Outside the class
print(s1.college_Name)#the output:IIT


 v We can modify static variable inside classMethod using cls variable


class Student:
    college_Name="ITM"

    @classmethod
    def m1(cls):
        cls.college_Name="IIT"

# instantiate the Student class 
s1=Student()
#acessing static variable using ClassName Outside the class
print(Student.college_Name) #the output:ITM
#acessing static variable using object reference Outside the class
print(s1.college_Name) #the output:ITM
s1.m1()
print("After modifying static variable through class Method")
#acessing static variable using ClassName Outside the class
print(Student.college_Name) #the output:IIT
#acessing static variable using object reference Outside the class
print(s1.college_Name) #the output:IIT


 v We can modify static variable outside the class using className

  §  In this example, we have defined a static variable named college_name
     we will be trying to be changed the static variable value with the help of reference 
     variable outside the class.

class Student:
    college_Name="ITM"

# instantiate the Student class 
s1=Student()
#acessing static variable using ClassName Outside the class
print(Student.college_Name)
#acessing static variable using object reference Outside the class
print(s1.college_Name)
#modifying the static variable outside class
Student.college_Name="IIT" 
print("After modifying static variable outside class")
#acessing static variable using ClassName Outside the class
print(Student.college_Name)
#acessing static variable using object reference Outside the class
print(s1.college_Name)

 v What happened when we are trying to modify static variable value by using self 
        or object reference variable.

  §  When we are trying to modify static variable value by using object reference or self       then the value of static variable won't be changes, just a new instance variable with       that name will be added to that particular object. 

class Student:
    college_Name="ITM"

    def m1(self):
        self.college_Name="IIT"

# instantiate the Student class 
s1=Student()
s1.m1()
#acessing static variable using ClassName Outside the class
print(Student.college_Name)
#acessing instance variable using object reference Outside the class
print(s1.college_Name)

Output
ITM
IIT


Program
 §  Let us say we want to assign a unique number to each product object. The first product object should be given a number 100 and subsequent product objects should have that value increased by 1. We can accomplish this by using a combination of static and instance variables as shown below:
class Product:
    productId=100
    def __init__(self,name,price,brand):
        self.name=name
        self.price=price
        self.brand=brand
        Product.productId +=1
    def displayPrdouctDetails(self):
        print("ProductId:",Product.productId)
        print("ProductName:",self.name)
        print("ProductPrice:",self.price)
        print("ProductBrand:",self.brand)

prod1=Product('Ipad',10000,'Apple')
prod1.displayPrdouctDetails()
print("============================")
prod2=Product('Redmi4A',10000,'Redmi')
prod2.displayPrdouctDetails()
Output
ProductId: 101
ProductName: Ipad
ProductPrice: 10000
ProductBrand: Apple
============================
ProductId: 102
ProductName: Redmi4A
ProductPrice: 10000
ProductBrand: Redmi
author

Author Name

Author Description!

Get Free Email Updates to your Inbox!

Post a Comment

www.CodeNirvana.in

Powered by Blogger.

About

Site Links

Popular Posts

Translate

Total Pageviews